迪傑斯特拉算法(SPF:Shortest Path First最短路徑算法)html
1. 算法思想算法
輸入(即已知條件): 有權重的無向圖G={E,V},V是頂點的集合,E是邊的集合 ,每一邊皆有權重(大於零),源節點s和目的節點d都屬於集合V(s∈V, d∈V)。htm
輸出(即求得的結果): 源節點s到全部其它節點的最短路徑的長度。blog
2. 初始化階段,除了起點A外,全部節點的距離dist設置爲無窮大。ci
3. 更新鄰居的距離get
起點A的鄰居爲爲B,D,根據邊AB、AD的權重,將其距離分別更新爲it
Distance(B)=2,Distance(D)=1test
4. 移除有最小距離的點Dim
因爲A的鄰居節點是B和D,Distance(B)=2>Distance(D)=1,因此移除D點。d3
5. 以移除的D爲起點進行更新
分別計算D的鄰居節點的距離,等於AD的權重,加上DC、DFDG、DE、DB的權重。
6. 移除B
在未移除的節點中,選擇距離最小的B( distance =2)移除,而且更新鄰居
注意:distance(D) D不用更新,由於D已知; distance(E)也不用更新,由於BD+DE=5,比前面計算的值3要大。
7. 移除E
在未移除的節點中,選擇距離最小的E(distance =3)移除,而且更新鄰居
因爲鄰居B、D已經移除,因此不用更新; distance(G)也不用更新,由於BE+GE=16>distance(G)=5,比前面計算的值5要大。
8. 移除C
在未移除的節點中,選擇距離最小的C(distance =3)移除,而且更新鄰居
9. 移除G
10. 最後移除F,並按前面原則更新各節點距離
到此,能夠獲得起點A到各個頂點的最短距離,完成了dijkstra的算法過程。