Dijkstra 计算两地间的最短距离
? ? ? ? 這里使用Dijkstra(戴克斯特拉)算法,該算法起始點實際計算出到任一點的距離,計算兩城市間的距離實際是一個副產物,所有一下圖為例來說明,該圖為無向圖,頂點間所標數字即為兩點之間的距離。
?
問題:求點D到點A的距離。
?初始狀態:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? 集合S中 D(0):D到D的距離為0;
? ? ? ? ? ? ? 集合U中 A(∞):D不能直接到達A;B(∞) :D不能直接到達B;C(3):D直接到達C的距離為3;E(4):D直接到達E的距離為4;F(∞):D不能直接到達F;G(∞):D不能直接到達G。
?
第1步:由初始條件可以看出U集合中C到D的距離最小,故將C添加到集合S中,更新后,兩集合關系如下:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ?D到C的最小距離為:3,D到C的路線為:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
第2步:逐個判斷集合S中元素到集合U中的距離,并將距離最小的點添加到集合S中
? ? ? ? ? ? ? ? ? 對A點?:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ?對B點:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? 對E點:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? 對F點:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? 對G點:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?由上可以看出? 距離最小為4,將E添加到集合S中,更新后的集合如下:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? 更新后,D到E的最短距離:4,D到E的最短路線為:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?
第3步,逐個判斷集合S中元素到集合U中的距離,并將距離最小的點添加到集合S中
? ? ? ? ? ? ? ?對A點:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? 對B點:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? 對F點:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? 對G點:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ?由上可以看出,距離最小為6,故將F點加入到S集合中,更新后S和U分別為
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ?跟新后,D到F的最短距離為:6,最短路線為:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?
第4步:逐個判斷集合S中元素到集合U中的距離,并將距離最小的點添加到集合S中
? ? ? ? ? ? ?對A點:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? 對B點:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ?對G點:
? ? ? ? ? ? ? ? ? ? ? ? ? ??
? 由上可以看出,距離最小為12,故將G點加入到S集合中,更新后S和U分別為
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? 更新后,D到G的距離最短:12,最短路線:
? ? ? ? ? ? ? ? ? ? ? ? ? ?
第5步:逐個判斷集合S中元素到集合U中的距離,并將距離最小的點添加到集合S中
? ? ? ? ? 對A點:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ?對B點:
? ? ? ? ? ? ? ? ? ? ? ? ??
由上可以看出,或距離最小為13,故將G點加入到S集合中,更新后S和U分別為
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
更新后,D到B的最短路線為:13,D到B最短路線為
? ? ? ? ? ? ? ? ? ?或
?
第6步:逐個判斷集合S中元素到集合U中的距離,并將距離最小的點添加到集合S中
? ? ? ? ? 對A點(D到B的最短路線有2條,我們可以任選一條,這里選D→C→B)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ?由上可以看出,?距離最小為22,故將G點加入到S集合中,更新后S和U分別為
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ?更新后,D到A的最短路線為:22,D到B最短路線為
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?
總結
以上是生活随笔為你收集整理的Dijkstra 计算两地间的最短距离的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BP算法,用梯度下降法更新权值W与偏置项
- 下一篇: 动态规划,背包问题