C++迪傑斯特拉演算法求最短路徑的詳細解釋
-
演算法解釋:
將各項頂點與v0間最短路徑長度遞增的次序,逐個將集合中V-S中的頂點加入到集合S中去,在這個過程中,總保持從V0到集合S中各頂點的路徑長度始終不大於集合V-S中各頂點的路徑長度 -
演算法實現
這個書上都會有,百度也行,本文章主要重點在於理解 -
通過例題詳解
如圖:
表格:最短路徑的求解(粗體表示最短路徑)
- 首先看圖可知,a到c的路徑最短為2,而其他的都較大或者為無窮,所以此時終點集為{a,c},即為當前最短路徑,所以c這一行後續將不在考慮,全部為空。
i=1 | i=2 | i=3 | i=4 | i=5 | i=6 | |
---|---|---|---|---|---|---|
b | 15 (a,b) | |||||
c | 2 (a,c) | |||||
d | 12 (a,d) | |||||
e | ∞ | |||||
f | ∞ | |||||
g | ∞ | |||||
S(終點集) | {a,c} |
- 因為c已經在最短路徑裡,下一步將c加入到其他路徑中,例如一開始a不能到e現在通過c可以到e,其他同理,而其他加了反而到不了的就可以忽視,繼續選擇原本的路徑或者∞,表格為:
i=1 | i=2 | i=3 | i=4 | i=5 | i=6 | |
---|---|---|---|---|---|---|
b | 15 (a,b) | 15 (a,b) | ||||
c | 2 (a,c) | |||||
d | 12 (a,d) | 12 (a,d) | ||||
e | ∞ | 10(a,c,e) | ||||
f | ∞ | 6(a,c,f) | ||||
g | ∞ | ∞ | ||||
S(終點集) | {a,c} | {a,c,f} |
- 其後同理,在i=3中,因為f無法帶入(a,c,e)中,所以這一行不變,在d這一行,發現帶入可以帶入c,f組成路徑,即為(a,c,f,d),表格為:
i=1 | i=2 | i=3 | i=4 | i=5 | i=6 | |
---|---|---|---|---|---|---|
b | 15 (a,b) | 15 (a,b) | 15 (a,b) | 15 (a,b) | ||
c | 2 (a,c) | |||||
d | 12 (a,d) | 12 (a,d) | 11(a,c,f,d) | 11(a,c,f,d) | ||
e | ∞ | 10(a,c,e) | 10(a,c,e) | |||
f | ∞ | 6(a,c,f) | ||||
g | ∞ | ∞ | 16(a,c,f,g) | 16(a,c,f,g) | ||
S(終點集) | {a,c} | {a,c,f} | {a,c,f,e} | {a,c,f,e,d} |
4.在i=5時,由於c,d,e,f皆找到最短路徑,所以最後的路徑一定在b或者g中,而此時b依然無法帶入其他點,在g點可以組成權值為14的路徑(a,c,f,d,g),最後終於到達b,得出最短路徑,表格為:
i=1 | i=2 | i=3 | i=4 | i=5 | i=6 | |
---|---|---|---|---|---|---|
b | 15 (a,b) | 15 (a,b) | 15 (a,b) | 15 (a,b) | 15 (a,b) | 15 (a,b) |
c | 2 (a,c) | |||||
d | 12 (a,d) | 12 (a,d) | 11(a,c,f,d) | 11(a,c,f,d) | ||
e | ∞ | 10(a,c,e) | 10(a,c,e) | |||
f | ∞ | 6(a,c,f) | ||||
g | ∞ | ∞ | 16(a,c,f,g) | 16(a,c,f,g) | 14(a,c,f,d,g) | |
S(終點集) | {a,c} | {a,c,f} | {a,c,f,e} | {a,c,f,e,d} | {a,c,f,e,d,g} | {a,c,f,e,d,g,b} |
相關文章
- 求最短路徑-----迪傑斯特拉演算法演算法
- 最短路徑—Dijkstra(迪傑斯特拉)演算法演算法
- 最短路-迪傑斯特拉(dijkstra)
- 路徑規劃演算法 - 求解最短路徑 - Dijkstra(迪傑斯特拉)演算法演算法
- 迪傑斯特拉與spfa
- Dijkstra迪傑斯特拉求最短路和最短路的條數和各個點權值的最大值
- dijkstra迪傑斯特拉演算法(鄰接表法)演算法
- 資料結構與演算法——迪傑斯特拉(Dijkstra)演算法資料結構演算法
- 資料結構學習筆記-迪傑斯特拉演算法資料結構筆記演算法
- 程式設計師必須會的基本演算法8-Dijkstra演算法(迪傑斯特拉演算法)程式設計師演算法
- L3-008 天梯團體賽 喊山 (30分) (vector容器的迪傑斯特拉解法)
- 演算法(四):圖解狄克斯特拉演算法演算法圖解
- 求最短路徑——DFS+Floyd演算法演算法
- 圖的最短路徑問題 詳細分解版
- 8.14 (河南牛客萌新賽 線段樹 ,ST求區間最值,迪傑斯特拉建正反圖,bfs+二分,模擬)+狀態bfs搜素
- 最短路:求最長最短路
- mysql 5.7配置項最詳細的解釋MySql
- vue的事件冒泡 最詳細解釋版本Vue事件
- 矩陣求最短路徑矩陣
- 《演算法圖解》總結第 7 章:狄克斯特拉演算法演算法圖解
- 最短路徑演算法演算法
- Element-ui(更新中表單最詳細的解釋)UI
- Leetcode 169:求眾數(最詳細的解法!!!)LeetCode
- Djikstra最短路徑演算法演算法
- 最短路徑(Dijskra演算法)JS演算法
- 最短路徑(Floyd演算法)演算法
- 幾個最短路徑的演算法演算法
- 使用A*演算法解迷宮最短路徑問題演算法
- SciTech-BigDataAIML-Algorithm-Heuristic啟發式- 帶weight(權重)Graph(圖,無向)的最優路線規劃 : Dijkstra迪傑斯特拉演算法"由節點路線無向Graph"得出"Routing Table(路由表)"AIGo演算法路由
- 蘭切斯特方程的分析和案例解釋
- 最短路徑之Floyd演算法演算法
- 最短路徑之Dijkstra演算法演算法
- [MATLAB]最短路徑Floyd演算法Matlab演算法
- 最短路徑演算法總結演算法
- 圖的最短路徑演算法彙總演算法
- 最短路徑問題 (dijkstra演算法)演算法
- Floyd演算法(計算最短路徑)演算法
- 單源最短路徑-Dijkstra演算法演算法