對n個點(n<=450),已知他們的邊,也就是相鄰關係,求任意兩個點的最短距離。
for(int k=1; k<=n; k++)//k寫在外面
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
對於0~k,我們分i到j的最短路正好經過頂點k一次和完全不經過頂點k兩種情況來討論。
不經過頂點k的情況下,d[k][i][j] = d[k-1][i][j]。
經過頂點k的情況,d[k][i][j] = d[k-1][i][k]+d[k-1][k][j]。
合起來就得到了d[k][i][j] = min(d[k-1][i][j],d[k-1][i][k]+d[k-1][k][j])。
這個dp也可以用同乙個陣列不斷進行如下的操作:
d[i][j] = min(d[i][j],d[i][k]+d[k][j])的更新來實現。
o(|v|³)。 450*450*450<10的8次方,v代表點的個數。
floyd 最短路演算法
floyd最短路徑演算法 在圖論中經常會遇到這樣的問題,在乙個有向圖裡,求出任意兩個節點之間的最短距離。我們在離散數學 資料結構課上都遇到過這個問題,在計算機網路裡介紹網路層的時候好像也遇到過這個問題,記不請了.但是書本上一律採取的是dijkstra演算法,通過dijkstra演算法可以求出單源最短...
最短路 Floyd演算法
1.定義概覽 floyd warshall演算法 floyd warshall algorithm 是解決任意兩點間的最短路徑的一種演算法,可以正確處理有向圖或負權的最短路徑問題,同時也被用於計算有向圖的傳遞閉包。floyd warshall演算法的時間複雜度為o n3 空間複雜度為o n2 2.演...
最短路 Floyd演算法
floyd演算法思想 1.初始化矩陣 i,j連線則矩陣的值為邊的代價,否則為max 2.計算 i 經過 k 到 j 的最短路徑map i,j min並儲存路徑 時間複雜度 o n 3 空間複雜度 t n 2 void floyd int n n為節點數,節點從1開始 例題 include inclu...