最短路径

Dijkstra 算法求解单源最短路径:每轮确定一个距离已最小(dist)的顶点,再用它松弛全部 出边,不断修正其余顶点的 dist。顶点下方的数字实时显示当前 dist,深色边构成最短路径树。

最短路径
01 / 17 步
有向带权图共 5 个顶点、10 条边。初始化 dist:源点 0 为 0,其余顶点为 ∞。
伪代码

				
					
					1
					procedure Dijkstra(G, v0)
				
			
				
					
					2
					  dist[v0] ← 0; 其余顶点 dist[v] ← ∞
				
			
				
					
					3
					  S ← empty set                  // 已确定最短路径的顶点
				
			
				
					
					4
					  while S ≠ V do
				
			
				
					
					5
					    u ← dist 最小且 ∉ S 的顶点
				
			
				
					
					6
					    S ← S ∪ {u}                  // 确定 u 的最短路径
				
			
				
					
					7
					    for each 出边 (u, v, w) do
				
			
				
					
					8
					      if dist[u] + w < dist[v] then
				
			
				
					
					9
					        dist[v] ← dist[u] + w    // 松弛成功,更新 v
				
			
				
					
					10
					  end while
				
			
				
					
					11
					end procedure
				
			
01 / 17
速度