【问题标题】:Unable to transfer adjacency list data and convert it into a adjacency matrix无法传输邻接表数据并将其转换为邻接矩阵
【发布时间】:2017-11-19 17:52:35
【问题描述】:

我的代码首先接受用户输入,其中:

  • n = 图中的顶点数

  • file = 要计算的文件

在这种情况下,我的文件是一个 .txt 文件,其中包含:

0 1  
2 1  
0 2  
1 3 

我的代码成功地将其转换为具有输出[[1, 2], [0, 2, 3], [1, 0], [1]] 的邻接列表。然而,问题是将其转换为邻接矩阵。我知道我的代码的主要问题在于这一行:

for x in range(len(vertices)):
    matrix[z-1][vertices[x]] = 1

这是我的完整代码:

n = int(input("Enter the number of vertices: ")) ## E.g. 4
file = input("Enter the filename: ") ## E.g. graph.txt

vertices = []
matrix = [] ## define list

for x in range(n):
    matrix.append([0]*n]) ## append a list for n, e.g. if n = 4 then [[][][][]]
    vertices.append([])

f =open(file)

z = 0
for line in f: ##loop statement until no more line in file
    line = line.split() ## turn every line into a list
    z+=1



    for y in range(len(line)):
        line[y] = line[y].strip() ## remove spaces
        line[y] = int(line[y]) ## converts line list into integer
           ## add  value of line into main list

    vertices[line[0]].append(line[1])
    vertices[line[1]].append(line[0])



for z in range(len(matrix)):

    for x in range(len(vertices)):
        matrix[z-1][vertices[x]] = 1



print(vertices)
print(matrix)

【问题讨论】:

  • 你为什么使用z-1z 在该循环中的初始值为 0。

标签: python algorithm list matrix


【解决方案1】:

首先,您使用z-1 作为可能为-1 的索引,因此应该只是z

其次,您在内部循环中访问vertices[x],就好像它有一个节点号,但它是一个嵌套列表。相反,您需要vertices[z][x]。为了性能,原则上最好为vertices[z]创建一个名称:

for z in range(len(matrix)):
    neighbors = vertices[z]
    for x in range(len(neighbors)):
        matrix[z][neighbors[x]] = 1

或者:

for z, neighbors in enumerate(vertices):
    for x in neighbors:
        matrix[z][x] = 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    相关资源
    最近更新 更多