简单复习最短路算法-Floyd和Dijkstra

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]

版权声明:本文为qq_32623363原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。