最短路径算法
Dijkstra —— 贪心算法
步骤:
1. 初始时,S只包含源点,即`S={v}`,顶点v到自己的距离为0。U包含除v外的其他顶点,v到U中顶点i的距离为边上的权。
2. 从U中选取一个顶点u,顶点v到u的距离最小,然后把顶点u加入S中。
3. 以顶点u为新考虑的中间点,修改v到U中各个点的距离。
4. 重复以上步骤知道S包含所有顶点。Floyd —— 动态规划
Last updated
步骤:
1. 初始时,S只包含源点,即`S={v}`,顶点v到自己的距离为0。U包含除v外的其他顶点,v到U中顶点i的距离为边上的权。
2. 从U中选取一个顶点u,顶点v到u的距离最小,然后把顶点u加入S中。
3. 以顶点u为新考虑的中间点,修改v到U中各个点的距离。
4. 重复以上步骤知道S包含所有顶点。Last updated
// let dist be a |V| × |V| array of minimum distances initialized to ∞ (infinity)
for each vertex v
dist[v][v] ← 0
for each edge (u,v)
dist[u][v] ← w(u,v) // the weight of the edge (u,v)
for k from 1 to |V|
for i from 1 to |V|
for j from 1 to |V|
if dist[i][j] > dist[i][k] + dist[k][j]
dist[i][j] ← dist[i][k] + dist[k][j]
end if