⚠️ 一个四点的反例
有向图:0→1 长 4、0→2 长 5、2→1 长 -3、1→3 长 1。运行 Dijkstra,看它给出的距离表:
import heapq
def dijkstra(g, s):
INF = 10 ** 9
d = {u: INF for u in g}
d[s] = 0
done = set()
pq = [(0, s)]
while pq:
du, u = heapq.heappop(pq)
if u in done:
continue
done.add(u)
for v, w in g[u]:
if du + w < d[v]:
d[v] = du + w
heapq.heappush(pq, (d[v], v))
return d
g = {0: [(1, 4), (2, 5)], 1: [(3, 1)], 2: [(1, -3)], 3: []}
d = dijkstra(g, 0)
print("/".join(str(d[u]) for u in sorted(g)))
全部评论