最短路徑算法:Dijkstra算法

本文部分內容參考:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html
最常用的路徑算法有:Dijkstra算法、A*算法、Bellman-Ford算法、Floyd-Warshall算法(參考)、Johnson算法。
本文主要研究Dijkstra算法的單源算法。
1.1  Dijkstra算法
  Dijkstra算法是典型最短路算法,用於計算一個節點到其他所有節點的最短路徑。主要特點是以起始點爲中心向外層層擴展,直到擴展到終點爲止。Dijkstra算法能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。 Dijkstra算法是很有代表性的最短路算法,在很多專業課程中都作爲基本內容有詳細的介紹,如數據結構,圖論,運籌學等等。 

1.2  Dijkstra算法思想
Dijkstra算法思想爲:設G=(V,E)是一個帶權有向圖,把圖中頂點集合V分成兩組,第一組爲已求出最短路徑的頂點集合(用S表示,初始時S中只有一個源點,以後每求得一條最短路徑 , 就將 加入到集合S中,直到全部頂點都加入到S中,算法就結束了),第二組爲其餘未確定最短路徑的頂點集合(用U表示),
(1)初始時,S只包含源點,v的距離爲0。U包含除v外的其他頂點,U中頂點u距離爲邊上的權;
(2)從U中選取一個距離v最小的頂點k,把k加入S中(該選定的距離就是v到k的最短路徑長度)。
(3)以k爲新考慮的中間點,修改U中各頂點的距離;若從源點v到頂點u的距離(經過頂點k)比原來距離(不經過頂點k)短,則修改頂點u的距離值,修改後的距離值的頂點k的距離加上邊上的權。
(4)重複步驟(2)和(3)直到所有頂點都包含在S中。

1.3  Dijkstra算法舉例說明
如下圖,設A爲源點,求A到其他各頂點(B、C、D、E、F)的最短路徑。線上所標註爲相鄰線段之間的距離,即權值。(注:此圖爲隨意所畫,其相鄰頂點間的距離與圖中的目視長度不能一一對等)

圖一:Dijkstra無向圖


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章