def relax(u,v,w,dist,prev):
if dist[u]+w < dist[v]:
dist[v] = dist[u]+w
prev[v] = u
def bellmanFord(V,E):
dist = [float('inf')] * V
prev = [None] * V
dist[0] = 0
for i in range(V-1):
for edge in E:
relax(edge[0],edge[1],edge[2],dist,prev)
#checks for negative cycles
for e in E:
u = e[0]
v = e[1]
w = e[2]
if dist[u]+w < dist[v]:
return 1
return 0
edges = []
edges.append([0, 1, 5])
edges.append([2, 3, -5])
edges.append([3, 4, -6])
edges.append([4, 2, -5])
edges.append([1, 2, 5])
print(bellmanFord(5, edges))
ZGVmIHJlbGF4KHUsdix3LGRpc3QscHJldik6CiAgICBpZiBkaXN0W3VdK3cgPCBkaXN0W3ZdOgogICAgICAgIGRpc3Rbdl0gPSBkaXN0W3VdK3cKICAgICAgICBwcmV2W3ZdID0gdQoKZGVmIGJlbGxtYW5Gb3JkKFYsRSk6CiAgICBkaXN0ID0gW2Zsb2F0KCdpbmYnKV0gKiBWCiAgICBwcmV2ID0gW05vbmVdICogVgogICAgZGlzdFswXSA9IDAKCiAgICBmb3IgaSBpbiByYW5nZShWLTEpOgogICAgICAgIGZvciBlZGdlIGluIEU6CiAgICAgICAgICAgIHJlbGF4KGVkZ2VbMF0sZWRnZVsxXSxlZGdlWzJdLGRpc3QscHJldikKCiAgICAjY2hlY2tzIGZvciBuZWdhdGl2ZSBjeWNsZXMgICAgICAgIAogICAgZm9yIGUgaW4gRToKICAgICAgICB1ID0gZVswXQogICAgICAgIHYgPSBlWzFdCiAgICAgICAgdyA9IGVbMl0KICAgICAgICBpZiBkaXN0W3VdK3cgPCBkaXN0W3ZdOgogICAgICAgICAgICByZXR1cm4gMQoKICAgIHJldHVybiAwCgplZGdlcyA9IFtdCmVkZ2VzLmFwcGVuZChbMCwgMSwgNV0pCmVkZ2VzLmFwcGVuZChbMiwgMywgLTVdKQplZGdlcy5hcHBlbmQoWzMsIDQsIC02XSkKZWRnZXMuYXBwZW5kKFs0LCAyLCAtNV0pCmVkZ2VzLmFwcGVuZChbMSwgMiwgNV0pCgpwcmludChiZWxsbWFuRm9yZCg1LCBlZGdlcykpCgoK