问题描述
给定下面的两个邻接表表示
g = {
'I': ['J','K','M'],'J': ['I','L'],'K': ['I','J','L': ['J'],'M': ['I','K']
}
#Weighted
g = {
'I': [('J',1),('K',2),('M',3)],'J': [('I',7),('L',5)],'K': [('I',('J',6)],'L': [('J','M': [(I,3),(K,6)]
}
如何以列表列表的形式输出等效邻接矩阵,特别是对于加权邻接列表。我已经应用了 How do I generate an adjacency matrix of a graph from a dictionary in python? 中的 karakfa 算法。但是,我似乎无法将其实现为加权图。
keys = sorted(g.keys())
M = [ [0]*len(keys) for i in range(len(keys)) ]
for a,b in [(keys.index(a),keys.index(b)) for a,row in g.items() for b in row]:
M[a][b] = 1
它返回 ValueError: ('J',1) is not in list
解决方法
原因是你的字典键是你的顶点名称,但你传递的是一个 (vertex_name,weight) 的元组。此外,变量名称令人困惑并可能导致错误(b
使用了两次)。
keys = sorted(g.keys())
M = [ [0]*len(keys) for i in range(len(keys)) ]
for vertex_1,row in g.items():
for vertex_2,weight in row:
M[keys.index(vertex_1)][keys.index(vertex_2)] = weight
这给出:
[[0,1,2,3],[1,7,5,0],[2,6],[0,[3,6,0]]