閱讀539 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Dijkstra\'s Algorithm

    算法解決的是有向圖中單個源點到其他頂點的最短路徑問題。舉例來說,如果圖中的頂點表示城市,而邊上的權重表示著城市間開車行經的距離,該算法可以用來找到兩個城市之間的最短路徑。

按路徑長度遞增次序產生算法:

把頂點集合V分成兩組:
(1)S:已求出的頂點的集合(初始時隻含有源點V0)
(2)V-S=T:尚未確定的頂點集合
將T中頂點按遞增的次序加入到S中,保證:
(1)從源點V0到S中其他各頂點的長度都不大於從V0到T中任何頂點的最短路徑長度
(2)每個頂點對應一個距離值
S中頂點:從V0到此頂點的長度
T中頂點:從V0到此頂點的隻包括S中頂點作中間頂點的最短路徑長度
依據:可以證明V0到T中頂點Vk的,或是從V0到Vk的直接路徑的權值;或是從V0經S中頂點到Vk的路徑權值之和。
求最短路徑步驟
算法步驟如下:
1. 初始時令 S={V0},T={其餘頂點},T中頂點對應的距離值
若存在<V0,Vi>,d(V0,Vi)為<V0,Vi>弧上的權值
若不存在<V0,Vi>,d(V0,Vi)為∞
2. 從T中選取一個其距離值為最小的頂點W且不在S中,加入S
3. 對其餘T中頂點的距離值進行修改:若加進W作中間頂點,從V0到Vi的距離值縮短,則修改此距離值
重複上述步驟2、3,直到S中包含所有頂點,即W=Vi為止
例子:
如下圖,設A為源點,求A到其他各頂點(B、C、D、E、F)的最短路徑。線上所標注為相鄰線段之間的距離,即權值。(注:此圖為隨意所畫,其相鄰頂點間的距離與圖中的目視長度不能一一對等)

圖一:

 最短路徑之Dijkstra算法詳細講解 - 綠岩 - 永遠的綠岩

算法執行步驟如下表:【注:圖片要是看不到請到“相冊--日誌相冊”中,名為“Dijkstra算法過程”的圖就是了】

最短路徑之Dijkstra算法詳細講解 - 綠岩 - 永遠的綠岩

最後更新:2017-04-03 12:54:16

  上一篇:go Bellman-Ford Algorithm
  下一篇:go 排序算法測試程序入口