python将邻接矩阵转化为list
时间: 2023-09-14 08:08:43 浏览: 339
可以使用Python的列表(list)来表示邻接矩阵。假设邻接矩阵是一个二维数组,可以使用以下代码将其转换为Python列表:
```python
adj_matrix = [[0, 1, 1, 0],
[1, 0, 1, 1],
[1, 1, 0, 1],
[0, 1, 1, 0]]
adj_list = [[] for _ in range(len(adj_matrix))] # 创建一个空的邻接表列表
for i in range(len(adj_matrix)):
for j in range(len(adj_matrix)):
if adj_matrix[i][j] == 1:
adj_list[i].append(j) # 将邻居节点添加到列表中
```
在上面的代码中,我们首先创建了一个空的邻接表列表,然后使用两个循环来遍历邻接矩阵,并将邻居节点添加到相应的邻接表中。最终,`adj_list`将是邻接矩阵的列表表示形式。
例如,对于上面的邻接矩阵,`adj_list`将是`[[1, 2], [0, 2, 3], [0, 1, 3], [1, 2]]`。
相关问题
将邻接表转化为邻接矩阵
将邻接表转化为邻接矩阵的过程可以简单描述为以下几个步骤:
1. 统计图中的节点数,创建一个 $n \times n$ 的零矩阵,其中 $n$ 是节点数。
2. 遍历邻接表中的每一个节点,对于每一个节点 $u$,遍历其相邻节点列表中的每一个节点 $v$,在邻接矩阵中将 $u$ 和 $v$ 对应的位置设为 $1$。
3. 如果图是有向图,那么在邻接表中节点 $u$ 的相邻节点列表中只包含了它的出边,而没有入边。为了在邻接矩阵中正确表示出入边关系,可以将上述过程中将 $u$ 和 $v$ 对应位置设为 $1$ 的步骤修改为将 $u$ 的行和 $v$ 的列设为 $1$。
下面是一个 Python 实现的示例代码:
```python
def adjacency_list_to_matrix(adj_list):
n = len(adj_list)
adj_matrix = [[0] * n for _ in range(n)]
for u in range(n):
for v in adj_list[u]:
adj_matrix[u][v] = 1
return adj_matrix
```
其中 `adj_list` 是邻接表,返回的 `adj_matrix` 是邻接矩阵。如果图是有向图,那么可以在内层循环中使用 `v` 的值来更新 `u` 的行和 `v` 的列。
邻接矩阵转化为邻接表
将邻接矩阵转化为邻接表可以通过遍历邻接矩阵中每个元素来实现。
具体步骤如下:
1. 创建一个空的邻接表。
2. 遍历邻接矩阵中的每个元素,如果该元素的值为1,则表示有一条边,根据该边的起点和终点,在邻接表中添加相应的边和节点。
3. 对于无向图,需要在邻接表中同时添加起点和终点的边,因为邻接矩阵是对称的。
4. 完成所有元素的遍历后,邻接表就构建完成了。
下面是一个示例代码,将邻接矩阵转化为邻接表:
```python
def adjacency_matrix_to_list(adj_matrix):
adj_list = {}
for i in range(len(adj_matrix)):
adj_list[i] = []
for j in range(len(adj_matrix[i])):
if adj_matrix[i][j] == 1:
adj_list[i].append(j)
adj_list[j].append(i) # 无向图需要同时添加起点和终点的边
return adj_list
```
其中,adj_matrix 是邻接矩阵,adj_list 是转化后的邻接表,返回值即为 adj_list。
阅读全文