我试图实现一个简单的邻接矩阵来跟踪哪些节点连接到无向图中的哪些节点.但是,我的邻接矩阵通过改变整个列而不是单个单元格而不断搞砸.这是我的代码:
def setup_adj_matrix(size, edges):
# initialize matrix with zeros
adj_matrix = [[0] * size] * size
# edges is a list of tuples, representing 2 nodes connected by an edge
for edge in edges:
v1 = edge[0]
v2 = edge[1]
adj_matrix[v1][v2] = 1
adj_matrix[v2][v1] = 1
for row in adj_matrix:
print row
Run Code Online (Sandbox Code Playgroud)
对于有3个节点(0,1,2)和边[(0,1),(0,2),(1,2)]的图形,我应该得到
[[0,1,1],
[1,0,1],
[1,1,0]]
Run Code Online (Sandbox Code Playgroud)
但是,我得到的都是1.任何可能出现问题的想法?
带有list和int的乘法运算符返回对同一列表的多个引用,而不是多个副本.您的数组包含相同的对象九次.
您可以使用双列表解析创建正确的数组:
def init_matrix(x, y):
return [[[0] for i in range(x)] for j in range(y)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
214 次 |
| 最近记录: |