演算法儲備之Floyd Warshall演算法

2021-08-09 23:49:49 字數 812 閱讀 9990

floyd warshall演算法是動態規劃的經典演算法

該演算法可以解決圖中每個頂點到其他頂點的距離,圖中可以有負權值邊,但不能有負迴圈。

時間複雜度為o(v的三次方)

演算法思想

dist[v][v]初始化為二維陣列edge[v][v]的內容

for迴圈執行v次,每次以乙個頂點為中間頂點,更新所有頂點通過中間頂點到其他頂點的距離

for(int k=0;ifor(int i=0;ifor(int j=0;jif(edge[i][k] ! = int_max && edge[k][j] != int_max && edge[i][j]>edge[i][k]+edge[k][j])

edge[i][j]=edge[i][k]+edge[k][j];

演算法的理解

設頂點v0到頂點v5之間的最短路徑為 v0->v6->v3->v4->v5

當中間頂點為除v0和v5的其他頂點時就能把與中間頂點相鄰的兩個頂點連起來,必能得到v0到v5的最短路徑

#include #include using namespace std;

struct graph

void floydwarshall();

};void printsolution(vector> & dist)

cout << endl; }}

void graph::floydwarshall()

int main()

, ,

, }; graph.floydwarshall();

return 0;

}

演算法儲備之Bellman Ford演算法

bellman ford演算法也是求圖的單源點最短路徑問題。不同於dijkstra演算法的是它能應用於帶負權值邊的圖,並且可以判斷圖中是否有負迴圈。該演算法的時間複雜度為o ve more than dijkstra演算法。v為頂點個數 dist v 陣列記錄所有頂點到源點的距離 執行v 1次迴圈 ...

演算法儲備之Dijkstra演算法求單源點最短路徑

迪傑斯特拉演算法求單元點最短路徑,圖的儲存結構為鄰接矩陣 在找最短距離和更新距離時都用for迴圈遍歷結點數 時間複雜度為o v include include include define v 9 int mindistance int dist,bool sptset return min ind...

python之併發程式設計儲備知識

1.3 作業系統的作用 2 多道技術 1.1 定義 作業系統就是乙個協調 管理和控制計算機硬體資源和軟體資源的控制程式 作業系統位於計算機硬體與應用軟體之間,本質也是乙個軟體。作業系統由作業系統的核心 執行於核心態,管理硬體資源 以及系統呼叫 執行於使用者態,為應用程式設計師寫的應用程式提供系統呼叫...