戴克斯特拉演算法(優先佇列) | 會動的演算法

符號表示

資料
從起點到各節點的暫定最短距離dist
節點編號nodeId
最短路徑樹中的父節點parent
節點間的距離weight

決定起點
將起點的距離初始化為 0。dist[s] ← 0
將其餘節點的距離初始化為極大的值。dist[v] ← INF
建立最短路徑樹
指向從堆積中取出的最佳節點。u
走訪相鄰節點並更新距離。if dist[e.v] > dist[u] + e.weight:
    dist[e.v] ← dist[u] + e.weight
    在 que 中插入 (dist[e.v], e.v)
    parent[e.v] ← u
標示最短路徑樹暫定要使用的邊。(v, parent[v])
擴大最短路徑樹。已在 T 內的節點
輸出最短路徑樹
利用父節點的資訊建立最短路徑樹。

演算法動畫

決定起點
戴克斯特拉演算法(優先佇列) | 決定起點

建立最短路徑樹
戴克斯特拉演算法(優先佇列) | 建立最短路徑樹

輸出最短路徑樹
戴克斯特拉演算法(優先佇列) | 輸出最短路徑樹