用floyd演算法求解下圖各個頂點的最短距離。寫出floyd演算法的偽**和給出距離(頂點之間的 最短距離矩陣),按實驗報告模板編寫演算法。
floyd演算法的基本思想如下:從任意節點a到任意節點b的最短路徑不外乎2種可能,1是直接從a到b,2是從a經過若干個節點x到b。所以,我們假設dis(ab)為節點a到節點b的最短路徑的距離,對於每乙個節點x,我們檢查dis(ax) + dis(xb) < dis(ab)是否成立,如果成立,證明從a到x再到b的路徑比a直接到b的路徑短,我們便設定dis(ab) = dis(ax) + dis(xb),這樣一來,當我們遍歷完所有節點x,dis(ab)中記錄的便是a到b的最短路徑的距離。
第1步:初始化map矩陣。
矩陣中map[i][j]的距離為頂點i到頂點j的權值;
如果i和j不相鄰,則map[i][j]=∞。
如果i==j,則map[i][j]=0;
第2步:以頂點a(假設是第1個頂點)為中介點,若a[i][j] > a[i][1]+a[1][j],則設定a[i][j]=a[i][1]+a[1][j]。
k.i.j分別代表經過的第k個點、行和列。
for
(k=1
;k<=n;k++
)for
(i=1
;i<=n;i++
)for
(j=1
;j<=n;j++)if
(e[i]
[j]>e[i]
[k]+e[k]
[j])
e[i]
[j]=e[i]
[k]+e[k]
[j];
floyd演算法可以說是warshall演算法的擴充套件,三個for迴圈就可以解決問題,所以它的時間複雜度為o(n^3)。
空間複雜度:o(n^2)。
%e7%a6%bb
最短距離之Floyd演算法
用floyd演算法求解下圖各個頂點的最短距離。寫出floyd演算法的偽 和給出距離矩陣 頂點之間的最短距離矩陣 floyd演算法可以方便的求得任意兩點的最短路徑,這稱為多源最短路,演算法的核心思想是動態規劃。它將多階段過程轉化為一系列單階段問題,利用各階段之間的關係,逐個求解。根據以往的經驗,如果要...
Floyd演算法求解最短距離
用floyd演算法求解下圖各個頂點的最短距離。寫出floyd演算法的偽 和給出距離矩陣 頂點之間的最短距離矩陣 floyd演算法又稱為插點法,是一種利用動態規劃的思想尋找給定的加權圖中多源點之間最短路徑的演算法,與dijkstra演算法類似。如果要讓任意兩點之間的路程變短,只能引入第三個點 頂點k ...
最短距離及最短路(Floyd 演算法)
include include using namespace std define n 100 define max 1000000 int d n n int path n n void min d int h 該函式找出最短距離,及最短路徑 coutcoutint h,a,b,k cout 輸...