1. 程式人生 > >最短路路徑(1.1版待更新)

最短路路徑(1.1版待更新)

多個 i++ floyd 規劃 什麽 原理 路徑 算法 動態規劃

一、只有5行代碼的floyd算法:

1、 什麽是floyd算法

弗洛伊德算法是解決多元最短路徑的算法(什麽是多源, 顧名思義就是起點有多個, 跑完floyd算法就算出以每個頂點做起點到各個點的最短路徑)。

2、時間復雜度 O(n^3)

3、代碼實現

for(k = 0;k < n;k++)
    for(i = 0;i< n;i++)
        for(j = 0;j <n;j++)
            if(grap[i][j] > grap[i][k]+grap[k][j])
                 grap[i][j] = grap[i][k]+grap[k][j];

4、原理

floyd算法用到的是動態規劃的思想。
動規公式: grap[i][j] = min(gtap[i][j], grap[i][k]+grap[k][j]).
每次決策得到最優解。

該算法就是通過一個中間頂點k ,判斷是否i通過k到達j的距離會更短(這一過程叫做松弛過程, 該算法通過多次的松弛得到最短路徑)。

最短路路徑(1.1版待更新)