Dijkstra 算法是一种图论中用来查找最短路径的算法。它适用于带有非负权重的图,可以找到一个顶点到其他所有顶点的最短路径。
算法 Dijkstra(Graph, source)
输入:图 Graph,其中包含图的顶点和边的集合,起始顶点 source
输出:从源到所有其他顶点的最短路径长度
1. 创建顶点集合 Q
2. 对于图中的每个顶点 v 做以下初始化:
a. dist[v] ← INFINITY // 初始距离设为无穷大
b. prev[v] ← UNDEFINED // v 的前驱节点未定义
c. 将 v 添加到 Q 中 // 所有节点初始时都未处理
3. dist[source] ← 0 // 源到自身的距离是0
4. 当 Q 不为空时:
a. 从 Q 中选出距离最小的顶点 u,即 dist[u] 是最小的
b. 从 Q 中移除 u
c. 对于 u 的每个邻接顶点 v:
i. alt ← dist[u] + length(u, v)
ii. 如果 alt < dist[v]:
1. dist[v] ← alt
2. prev[v] ← u
5. 返回 dist[], prev[]
在这个伪代码中,Graph
是由顶点和边组成的图,source
是起始顶点。dist[]
用来存储从源点到每个顶点的最短距离,prev[]
用来重建最短路径,即存储到达每个顶点的最短路径上的前一个顶点。INFINITY
是一个足够大的数,表示无穷大,用于初始化距离。UNDEFINED
表示未定义的前驱节点。length(u, v)
是顶点 u
到顶点 v
的边的权重。