原文連結:https://blog.csdn.net/xiaoxi_hahaha/article/details/110257368
已知起始結點,求最短路徑的問題。適合使用Dijkstra演算法。迪傑斯特拉演算法是由荷蘭電腦科學家在1956年發現的演算法,此演算法使用類似廣度優先搜尋的方法解決了帶權圖的單源最短路徑問題。它是一個貪心演算法。
全域性最短路徑問題- 求圖中所有的最短路徑。適合使用Floyd-Warshall演算法
Dijkstra演算法:
首先,可以設定兩個集合分別是A和B,A用來存放已經求出最短路徑的點,B用來存放還未計算出最短路徑的點,
我們從圖中任選一點來解題,假設我們將源點source選擇在” 0 "這個點。一開始所有點到達源點0的距離我們假設為∞,代表不可達。源點0到自己本身的距離為0,初始化如下:此時A集合為:{0},B集合為:{1,2,3,4,5,6}
第一步:從0點開始,更新和0鄰接的所有點的距離,此時,因為與0鄰接的有1和2,並且到這兩個點的距離,小於原來的∞距離,所以要將這兩個點到0的距離都進行更新如下圖,
第二步:從B集合裡面選擇一個點加入A集合,這個點要滿足距離0點的距離最短,因此我們選擇2這個點新增到集合A,此時集合A變為:{0,2},集合B變為:{1,3,4,5,6},如下圖
第三步:選擇剛剛加入的這個2點,更新所有與2點鄰接的點,因為與2鄰接的點有3和5,並且這兩個點到0點的距離小於原來它們到0點的距離∞
第四步:從B集合裡面選擇1這點加入到集合A中,因為1這個點在B集合中距離0最近,如下圖,此時A集合變成:{0,1,2},B集合變成:{3,4,5,6}
第五步:選擇剛剛加入的1這個點,更新1所有的鄰接點,它的鄰接點有3和4,因為此刻從0到3的距離為6,小於原來0到3的距離8,因此這個時候到6的距離更新為6(5+1),此時0到4的距離被更新為11