淺談數據結構之圖的面試真題-Dijkstra最短路徑算法(四)
算法描述
通過Dijkstra計算圖G中的最短路徑時,需要指定起點vs(即從頂點vs開始計算)。
此外,引進兩個集合S和U。S的作用是記錄已求出最短路徑的頂點,而U則是記錄還未求出最短路徑的頂點(以及該頂點到起點vs的距離)。
操作步驟
- 初始時,S只包含起點vs;U包含除vs外的其他頂點,且U中頂點的距離爲"起點vs到該頂點的距離"[例如,U中頂點v的距離爲(vs,v)的長度,然後vs和v不相鄰,則v的距離爲∞]。
- 從U中選出"距離最短的頂點k",並將頂點k加入到S中;同時,從U中移除頂點k。
- 更新U中各個頂點到起點vs的距離。之所以更新U中頂點的距離,是由於上一步中確定了k是求出最短路徑的頂點,從而可以利用k來更新其它頂點的距離;例如,(vs,v)的距離可能大於(vs,k)+(k,v)的距離。
- 重複步驟(2)和(3),直到遍歷完所有頂點。