【发布时间】:2017-04-23 12:49:30
【问题描述】:
尽管我知道自己做错了什么,但我仍在努力弄清楚如何有效地实施这一点。我正在尝试让我的代码读取邻接列表,例如无向加权图:
[(1,5)], [(0,5), (2,7)], [(1,7)]
然后将其转换为邻接矩阵,该矩阵将返回:
[0, 5, inf], [5, 0, 7], [inf, 7, 0]
然而,下面的代码返回 [0, 5, inf], [5, inf, 0, inf, 7], [inf, 7, 0],我知道这是为什么。但是,我只想在 [0, 5, inf] 等情况下将“inf”附加到邻接矩阵,因为 0 不与 2 相邻,因此其权重为“inf”。最好的解决方案是什么?
def adjacency_matrix(graph_string):
adj_list = adjacency_list(graph_string)
n = len(adj_list)
adj_mat = [[] for _ in range(n)]
for i in range(n):
for j in range(n):
if j == i:
adj_mat[i].append(0)
else:
for neighbour, weight in adj_list[i]:
if j == neighbour:
adj_mat[i].append(weight)
break
elif j != neighbour:
adj_mat[i].append(float('inf'))
return adj_mat
【问题讨论】:
-
adjacency_list函数是什么? -
请使用示例
graph_string和adjacency_list函数提供您的问题的完整示例。