我一直致力于在 Python 中实现 Bellman-Ford 算法,以检测上面链接的问题的负循环。然而,我遇到了障碍。尽管我付出了努力,但我还是遇到了针对问题的错误答案和频繁的超出时间限制 (TLE) 错误。
这是我编写的Python代码:
def bellman_ford(n, edges):
dist = [float('inf')] * (n + 1)
dist[1] = 0
prev = [-1] * (n + 1)
for _ in range(n - 1):
for u, v, w in edges:
if dist[u] != float('inf') and dist[u] + w < dist[v]:
dist[v] = dist[u] + w
prev[v] = u
for u, v, w in edges:
if dist[u]!=float('inf') and dist[u] + w < dist[v]:
cycle = [v]
prev[v] = u
while u != v:
cycle.append(u)
u = prev[u]
cycle.append(v)
return True, cycle[::-1]
return False, None
n, e = map(int, input().split())
edges = []
for _ in range(e):
u, v, w = map(int, input().split())
edges.append((u, v, w))
chk, cycle = bellman_ford(n, edges)
if chk == True:
print("YES")
print(*cycle)
else:
print("NO")
我已经进行了多次试运行,但我无法查明我的实施中的确切缺陷。任何有助于确定我哪里出了问题的帮助将不胜感激。
提前感谢您的帮助!