50 10 60 edgeTo[3] = 0,反过来排列,
2 20 3
得到路径 0, 3, 2, 4,这就是源 点0到终点4的最短路径。
Dijkstra示例
顶点0 0 0
顶点1 -
顶点2 -
顶点3 -
顶点4 -
索引堆:
0
10 0 100
1 30 4
50 10
60
2 20 3
0
1
2
3
4
0
-
-
-
-
Dijkstra示例
短路径长度; ➢ ...... ➢ dist n-1 [u]为从源点s出发最多经过不构成负权值回路的n-1次relax到达终点u的
最短路径长度;
• 算法的最终目的是计算出dist n-1 [u],为源点v到顶点u的最短 路径长度。
dist k [u]的计算
• 设已经求出 dist k-1 [u] , u = 0, 1, …, n-1,即从源点s经过最多 不构成负权值回路的k-1次relax到达终点u的最短路径的长度
点,该值为无穷大) ➢ distTo[v]是最短路径,当且仅当:对于任意一条v到w的边e,都满足:
distTo[w] ≤ distTo[v] + e.weight()
最短路径通用算法
• 算法SP(G, s):
➢ distTo[s] 初始化为 0 ➢ 对于其他各个节点, distTo[v]初始化为无穷大 ➢ 重复如下操作:松驰G中的任意边,直到不存在有效边为止
➢ dist 1 [u]为从源点s到终点u的最多经过1次relax的最短路径长度,并有dist 1 [u] =adj[s][u];
➢ dist 2 [u]为从源点s最多经过两次relax到达终点u的最短路径长度; ➢ dist 3 [u]为从源点s出发最多经过不构成负权值回路的三次relax到达终点u的最