資料結構 最短路徑演算法之Floyed演算法

2021-08-15 19:04:12 字數 1615 閱讀 7923

floyed-warshall 演算法用來找出每對點之間的最短距離。它需要用鄰接矩陣來儲存邊,這個演算法通過考慮最佳子路徑來得到最佳路徑。 注意單獨一條邊的路徑也不一定是最佳路徑。

時間複雜度o(n^3),只要有存下鄰接矩陣的空間,時間一般沒問題,並且不必擔心負權邊的問題。

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int max = 1000000;

// floyed演算法可以計算得到任意的i到j的最短路徑

/*6 個節點

1000000 1000000 10 100000 30 100

1000000 1000000 5 1000000 1000000 1000000

1000000 1000000 1000000 50 1000000 1000000

1000000 1000000 1000000 1000000 1000000 10

1000000 1000000 1000000 20 1000000 60

1000000 1000000 1000000 1000000 1000000 1000000

結果d[0] d[1] d[2] d[3] d[4] d[5]

0 1000000 10 50 30 60

//節點0到節點5的最短路徑是0 4 3 5

*/void floyd()

; int flag[6][6] = ;

//訪問標誌初始化

for (int i = 0; ifor (int j = 0; j1;

for (int k = 0; kfor (int i = 0; ifor (int j = 0; jif (mat[i][j] <= max && mat[i][k] + mat[k][j] < mat[i][j])}}

}for (int i = 0; icout

<< mat[0][i] << " ";

cout

<< endl;

//列印beg到end的最短路徑節點資訊

int beg = 0, end = n - 1;

int next = flag[beg][end];

cout

<< beg << " -> ";

while (next != -1)

cout

<< end << endl;

}int main()

資料結構 最短路徑 Dijkstra演算法

最短路徑 dijkstra演算法 設計實現有向網,針對隨機有向網例項和隨機源點,用dijkstra演算法求解出單源點到其他各頂點的最短路徑。給出求解過程的動態演示。可考慮實現不用儲存結構上的實現。如下圖所示,若要建立乙個這樣的圖,且源點為1時,則輸入順序為 include include defin...

資料結構和演算法 最短路徑

dijstra 演算法 void shortestpath dij mgraph g,int v0,bool path maxvertexnum maxvertexnum int pathlen pathlen v0 0 final v0 true 將 v0加 頂點集合 s 開始主迴圈,每次求得 v...

大話資料結構 最短路徑演算法

迪傑斯特演算法的核心是首先正向把離起點最近的點乙個乙個找出來,然後從終點開始逆向計算最短路徑 利用圖資料結構實現dijkstra演算法的偽 如下 建立乙個陣列f記錄頂點是否已經計算離頂點最近的距離 建立乙個儲存路徑的陣列p 迴圈頂點個數的次數 將於k有連線的頂點w在距離d中的值更新,如果通過頂點k,...