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 定義 作業系統就是乙個協調 管理和控制計算機硬體資源和軟體資源的控制程式 作業系統位於計算機硬體與應用軟體之間,本質也是乙個軟體。作業系統由作業系統的核心 執行於核心態,管理硬體資源 以及系統呼叫 執行於使用者態,為應用程式設計師寫的應用程式提供系統呼叫...