interview

最短路径算法

Dijkstra——贪心算法

从一个顶点到其余顶点的最短路径

G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第1组为已求出最短路径的顶点(用S表示,初始时S只有一个源点,以后每求得一条最短路径v,...k,就将k加到集合S中,直到全部顶点都加入S)。第2组为其余未确定最短路径的顶点集合(用U表示),按最短路径长度的递增次序把第2组的顶点加入S中。

步骤:

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——动态规划

每对顶点之间的最短路径