Floyd算法是求每一个顶点到每一个顶点间的最短距离,Dijkstra是求指定顶点到其余所有顶点间的最短距离。
**Floyd思想:**不断加入新的中间结点,来判断加入新节点会否使得某点到其余点距离更近。
for i in range(len(V)): # 中间结点
for j in range(len(V)): # 起始顶点
for k in range(len(V)): # 结束顶点
if dist[j][k] > dist[j][i] + dist[i][k]:
dist[j][k] = dist[j][i] + dist[i][k]
**Dijkstra思想:**在所有顶点集合V之外,定义一个源节点集S,不断往S中添加结点,并计算指定节点A在通过源节点集后到达其余结点的最短距离,并不断更新这个距离。每次选取A通过源节点集能到达的其余所有节点的最近的节点加入源节点集,直到源节点集=顶点集合V。
while V - S != NULL:
find v_i that can achieve the minist dist[A, v_i] from the set V - S
S = S U v_i
for v_j ∈ V - S:
if dist[A, v_j] > dist[A, v_i] + dist[v_i, v_j]:
dist[A, v_j] = dist[A, v_i] + dist[v_i, v_j]