修改Dijkstra进行计数

时间:2015-11-08 23:24:32

标签: python algorithm graph

我在某处读到可以修改Dijkstra算法来计算两个顶点之间最短路径的数量。如果这是我对Dijkstra算法的实现,我怎么能修改它来计算呢?

def dijkstra(G, s, t):
    D, P = {}, {}
    Q = {v: float('inf') for v in G}
    Q[s] = 0

    for v in Q:
        D[v] = Q[v]
        if v == t: break

        for w in G[v]:
            if D[v] + G[v][w] < Q[w]:
                P[w] = v
                Q[w] = D[v] + G[v][w]
    return D, P

是否像D[v] + G[v][w] = Q[w]时递增计数器一样简单,并且当计数器小于Q[w]时重置计数器?

1 个答案:

答案 0 :(得分:1)

  

当D [v] + G [v] [w] = Q [w]时递增计数器并且当计数器小于Q [w]时重置计数器这么简单吗?

不完全。如果D[v] + G[v][w] == G[w],那并不意味着您找到了一条临时最短的w路径。毕竟,v可能有多条最短的路径,每条路径都会为你提供一条临时最短的路径。您需要将v的计数器值添加到w的计数器中。此外,如果重置w的计数器,则将其重置为v的计数器值,而不是0。