迪杰斯特拉算法(优先队列) | 动画算法与数据结构

符号

数据
从起点到各节点的暂定最短距离 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
    将 (dist[e.v], e.v) 插入 que
    parent[e.v] ← u
表示最短路径树的暂定边 (v, parent[v])
扩展最短路径树 T 中包含的节点
最短路径树的输出
基于父节点的信息构建最短路径树

动画

起点的确定
迪杰斯特拉算法(优先队列) | 起点的确定

最短路径树的构建
迪杰斯特拉算法(优先队列) | 最短路径树的构建

最短路径树的输出
迪杰斯特拉算法(优先队列) | 最短路径树的输出