import sys
class Graph:
def __init__(self,graph,edge):
self.graph=graph
self.edge=edge
self.w=[[sys.maxsize]*len(self.graph) for i in range(len(self.graph))]
for i in range(len(self.w)):
for j in range(len(self.w)):
if(i==j):self.w[i][j]=0
if self.edge.get( (i,j) ): self.w[i][j]=self.edge[i,j]
def Floyd_Warshall(self):
n=len(self.w)
D=[list(self.w)for i in range(n)]
D0=list(self.w)
p0=[[0]*n for i in range(n)]
p=[list(p0) for i in range(n)]
for i in range(n):
for j in range(n):
if i==j or not self.edge.get( (i,j) ) : p0[i][j]=None
else: p0[i][j]=i
print(p0)
for k in range(len(D)):
for i in range(0,n):
for j in range(0,n):
if (k):
D[k][i][j]=min(D[k-1][i][j],D[k-1][i][k]+D[k-1][k][j])
if D[k][i][j]== (D[k-1][i][k]+D[k-1][k][j]) : p[k][i][j]=p[k-1][k][j]
else: p[k][i][j]=p[k-1][i][j]
else:
D[0][i][j]=min(D0[i][j],D0[i][0]+D0[0][j])
if D[0][i][j]==(D0[i][0]+D0[0][j]) : p[0][i][j]=p0[0][j]
else: p[0][i][j]=p0[i][j]
print(p0)
return D[n-1],p0
edge={(0,1):6,(0,2):-1,(1,0):2,(1,2):2,(2,1):3}
graph={0:[1,2],1:[0,2],2:[1]}
G=Graph(graph,edge)
G.Floyd_Warshall()# your code goes here
aW1wb3J0IHN5cwpjbGFzcyBHcmFwaDoKCWRlZiBfX2luaXRfXyhzZWxmLGdyYXBoLGVkZ2UpOgoJCXNlbGYuZ3JhcGg9Z3JhcGgKCQlzZWxmLmVkZ2U9ZWRnZQoKCQlzZWxmLnc9W1tzeXMubWF4c2l6ZV0qbGVuKHNlbGYuZ3JhcGgpIGZvciBpIGluIHJhbmdlKGxlbihzZWxmLmdyYXBoKSldCgkJZm9yIGkgaW4gcmFuZ2UobGVuKHNlbGYudykpOgoJCQlmb3IgaiBpbiByYW5nZShsZW4oc2VsZi53KSk6CgkJCQlpZihpPT1qKTpzZWxmLndbaV1bal09MAoJCQkJaWYgc2VsZi5lZGdlLmdldCggKGksaikgKTogc2VsZi53W2ldW2pdPXNlbGYuZWRnZVtpLGpdCgoJZGVmIEZsb3lkX1dhcnNoYWxsKHNlbGYpOgoJCW49bGVuKHNlbGYudykKCQlEPVtsaXN0KHNlbGYudylmb3IgaSBpbiByYW5nZShuKV0KCQlEMD1saXN0KHNlbGYudykKCQlwMD1bWzBdKm4gZm9yIGkgaW4gcmFuZ2UobildCgkJcD1bbGlzdChwMCkgZm9yIGkgaW4gcmFuZ2UobildCgkJZm9yIGkgaW4gcmFuZ2Uobik6CgkJCWZvciBqIGluIHJhbmdlKG4pOgoJCQkJaWYgaT09aiBvciBub3Qgc2VsZi5lZGdlLmdldCggKGksaikgKSA6IHAwW2ldW2pdPU5vbmUKCQkJCWVsc2U6IHAwW2ldW2pdPWkKCQlwcmludChwMCkKCQlmb3IgayBpbiByYW5nZShsZW4oRCkpOgoJCQlmb3IgaSBpbiByYW5nZSgwLG4pOgoJCQkJZm9yIGogaW4gcmFuZ2UoMCxuKToKCQkJCQlpZiAoayk6CgkJCQkJCURba11baV1bal09bWluKERbay0xXVtpXVtqXSxEW2stMV1baV1ba10rRFtrLTFdW2tdW2pdKQoJCQkJCQlpZiBEW2tdW2ldW2pdPT0gKERbay0xXVtpXVtrXStEW2stMV1ba11bal0pIDogcFtrXVtpXVtqXT1wW2stMV1ba11bal0KCQkJCQkJZWxzZToJcFtrXVtpXVtqXT1wW2stMV1baV1bal0KCQkKCQkJCQllbHNlOgoJCQkJCQlEWzBdW2ldW2pdPW1pbihEMFtpXVtqXSxEMFtpXVswXStEMFswXVtqXSkKCQkJCQkJaWYgRFswXVtpXVtqXT09KEQwW2ldWzBdK0QwWzBdW2pdKSA6IHBbMF1baV1bal09cDBbMF1bal0gCgkJCQkJCWVsc2U6CXBbMF1baV1bal09cDBbaV1bal0KCQlwcmludChwMCkKCQlyZXR1cm4gRFtuLTFdLHAwCmVkZ2U9eygwLDEpOjYsKDAsMik6LTEsKDEsMCk6MiwoMSwyKToyLCgyLDEpOjN9CmdyYXBoPXswOlsxLDJdLDE6WzAsMl0sMjpbMV19Ckc9R3JhcGgoZ3JhcGgsZWRnZSkKRy5GbG95ZF9XYXJzaGFsbCgpIyB5b3VyIGNvZGUgZ29lcyBoZXJl
[[None, 0, 0], [1, None, 1], [None, 2, None]]
[[None, None, None], [None, None, None], [None, None, None]]