我在某处读到可以修改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]
时重置计数器?
答案 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。