两张图,各有没有负环
一张是上一节那个有负权边的图,一张是 0→1:1、1→2:-1、2→1:-1(1 和 2 之间绕一圈是 -2)。运行下面这段程序:
def has_neg_cycle(g, s):
INF = 10 ** 9
d = {u: INF for u in g}
d[s] = 0
for _ in range(len(g) - 1):
for u in g:
if d[u] == INF:
continue
for v, w in g[u]:
if d[u] + w < d[v]:
d[v] = d[u] + w
for u in g:
if d[u] == INF:
continue
for v, w in g[u]:
if d[u] + w < d[v]:
return True
return False
print(str(has_neg_cycle({0: [(1, 4), (2, 5)], 1: [(3, 1)], 2: [(1, -3)], 3: []}, 0)) + "/" + str(has_neg_cycle({0: [(1, 1)], 1: [(2, -1)], 2: [(1, -1)]}, 0)))
全部评论