我对 Bellman-Ford 进行了一些修改以获得一些我需要比较的数据,但我似乎无法从 return PrintArr 方法中获得一些我需要的信息,而它打印了“dist_list” ' return 不会接受它,我也无法使用列表理解创建对象。
Class Graph:
def __init__(self, vertices):
self.V = vertices
self.graph = []
def addEdge(self, u, v, w):
self.graph.append([u, v, w])
def printArr(self, dist, src):
#print("Source End Distance")
dist_list = []
for i in range(self.V):
#print("{0}\t{1}\t{2}".format(src, i, dist[i]))
#print(src, i, dist[i])
dist_list.append([src, i, dist[i]])
print(dist_list)
print(dist_list == [[src, i, dist[i]] for i in range(self.V)])
return [[src, i, dist[i]] for i in range(self.V)]
def BellmanFord(self, src):
dist = [float("Inf")] * self.V
dist[src] = 0
for _ in range(self.V - 1):
for u, v, w in self.graph:
if dist[u] != float("Inf") and dist[u] + w < dist[v]:
dist[v] = dist[u] + w
for u, v, w in self.graph:
if dist[u] != float("Inf") and dist[u] + w < dist[v]:
print("Graph contains negative weight cycle")
return
self.printArr(dist, src)
matrix = [[0, 2, 2, 2, -1], [9, 0, 2, 2, -1], [9, 3, 0, 2, -1], [9, 3, 2, 0, -1], [9, 3, 2, 2, 0]]
g = Graph(len(matrix))
[[g.addEdge(i, j, element) for j, element in enumerate(array) if i != j] for i, array in enumerate(matrix)]
print(g.BellmanFord(0))
输出:
[[0, 0, 0], [0, 1, 2], [0, 2, 1], [0, 3, 1], [0, 4, -1]]
真的
没有任何
打印:好的
清单 A = 清单 B
为什么 return 没有???我错过了什么?
回答1
None
来自:
print(g.BellmanFord(0))
BellmanFord
在任何情况下都不会 returns 任何有用的东西(它要么落下并隐含 returns None
,要么执行一个普通的 return
,它也是 return None
)。删除调用周围的 print()
,您将避免 None
输出。
或者,将 self.printArr(dist, src)
更改为 return self.printArr(dist, src)
,以便它执行 return 一些有用的操作(假设早期的 return
,它可能应该引发异常而不是静默返回 None
,没有被调用)。