如何从邻接表中获得邻接矩阵?

时间:2020-01-08 19:47:53

标签: python graph

样本输入:

4 7
1 2
2 3
3 1
4 1
2 2
4 2
4 3
第一行包含两个数字:
n和 米 -图形中的顶点和边的数量。下一个 m条线各包含两个数字,即边的起点和终点。输入可以包含多个边和循环。

我需要在其中打印邻接矩阵 ñ 行,每行有 n个零或一: 如果对应的一对顶点之间没有边,则为0;如果存在边,则为1。

样本输出:

0100
0110
1000
1110

2 个答案:

答案 0 :(得分:1)

似乎这是一个难题或家庭作业问题,可能不应该自己尝试,而不仅仅是代码。您可以自行添加阅读内容或写出部分内容。

adjacency_list = [...] #adj list
n = ... #num vertices
m = ... #num edges
adjacency_matrix = [[0 for i in range(n)] for j in range(n)] # (numpy) = np.zeros((n,n))
for i,j in adjacency_list:
    adjacency_matrix[i][j] = 1

答案 1 :(得分:1)

首先可以使用numpy从大小为N的零数组开始(在本例中为4)。然后,您可以将邻接列表用作邻接矩阵的索引,并将其分配给那些位置。

>>> import numpy as np
>>> mat = np.zeros((4,4))
>>> edges = np.array([[1,2],[2,3],[3,1],[4,1],[2,2],[4,2],[4,3]])
>>> edges -= 1
>>> mat[edges[:,0], edges[:,1]] = 1
>>> mat
array([[0., 1., 0., 0.],
       [0., 1., 1., 0.],
       [1., 0., 0., 0.],
       [1., 1., 1., 0.]])