談談單元最短路

2022-05-18 10:14:14 字數 873 閱讀 6299

單元最短路,應該會立即想到spfa和dijkstra。

相較而言,我用spfa的次數更加多一些,

一般這些題目都可以用  spfa(演算法)+(資料結構)邊表給做掉,

借用了

這位大神的**。

我們一般用的都是spfa的bfs應用,這是比較正確的,一般情況下

bfs演算法優勢明顯,但是為什麼還需要dijkstra呢?

如上圖,這裡的話,可以發現spfa的弱點就出來了,這裡的dijkstra是指加堆優化的。

而且,對於所有情況下,dijkstra更加平均,時間複雜度更加可以保證,而spfa是期望複雜度,不能夠保證其時間複雜度(一般題目中應該是可以過的,如果不是針對卡你最短路的話)。

dijkstra複雜度o(nlogn) spfa複雜度 期望是o(km) k一般取2即可,但網格圖這些就不行了,完全沒有優勢,達到了o(en)

所以學會dijkstra後**量短並且時間更加平均。

spfa無法解決 負權迴路

dijkstra無法解決 負權

如果有負權迴路,應該用bellman—ford 解決,這個複雜度是高的達到了o(nm)

spfa優化

單元最短路

在乙個有 n 個點,m 個邊的有向圖中,已知每條邊長,求出 1 到 n 的最短路徑,返回 1 到 n 的最短路徑值。如果 1 無法到 n 輸出 1 圖中可能有重邊,無自環。import j a.util.public class solution for int i 0 i graph.length...

單元最短路問題

貪心策略,始終選擇從出發點s到達頂點i的當前最短距離為d i 那麼就會出現下列推導關係 d i min 其中cost j,i 表示從頂點j到頂點i的權值 如果給定的圖是dag,那麼就可以按拓撲序給頂點編號,並且利用上述推到關係計算,但是如果給定圖 中有圈,就無法依照這樣的順序來進行計算。在這種情況下...

單元最短路徑問題

給定乙個帶權有向圖 g v,e 其中每條邊的權是乙個非負實數。另外,還給定 v 中的乙個頂點,稱為源。現在我們要計算從源到所有其他各頂點的最短路徑長度。這裡的長度是指路上各邊權之和。這個問題通常稱為單源最短路徑問題。dijkstra演算法 public class dijkstra dijkstra...