兩者在負權問題上不是很好,最好只處理正值,dijkstra演算法對負權毫無辦法,但是floyd演算法不能處理出現負環的東西。。。
dijkstra演算法的話,為了方便,我認為從i到i點不可達;百部百科解釋挺好,那個堆優化挺好的
floyd演算法百部百科也不錯,都是老演算法了,哪都有資料
這位筒子的寫得很好
mathematica下的**【我也覺得mathematica寫很詭異。。。】
(*dijkstra演算法,其思想和prim有點像,輸出的是每個點的前向節點*)dijkstradijkstra[tu_, dian_, point_] :=module[
], diannum = dian, visin = table[false, ], k, lval,
mindis, flag =true},
visin[[point]] =true;
k =point;
while[diannum != 0
, mindis =infinity;
do[if[visin[[i]] == false && dis[[i]] < mindis, mindis =dis[[i]];
k =i]
, ];
if[mindis == infinity, flag =true; break];
diannum--;
visin[[k]] =true;
do[if[visin[[j]], continue];
lval = tu[[k]][[j]] +dis[[k]];
if[lval
< dis[[j]], dis[[j]] = lval; pre[[j]] =k]
, ]];
pre]
input:示例tuer = , , , , , , }
dijkstra[tuer,
7, 1
]out:
(*floyd演算法,列印輸出了長度,函式輸出前節點*)floydfloyd[tu_, dian_] :=module[
, ], dis =tu, lenn},
do[do[
do[lenn = dis[[i, k]] +dis[[k, j]];
if[dis[[i, j]] > lenn, path[[i, j]] = k; dis[[i, j]] =lenn]
, ], ]
, ];
print[dis];
path
]
input:示例tuer = , , , , , , }
floyd[tuer, 7]
during evaluation of input:
,,,,,,}
out:
, , , , , , }
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...