📅  最后修改于: 2023-12-03 14:53:55.348000             🧑  作者: Mango
邻接矩阵和邻接表是图的两种常见表示方法,其中邻接矩阵使用二维数组表示节点之间的边关系,邻接表使用链表表示节点之间的边关系。在某些场景下,需要将邻接矩阵转换为邻接表来方便地进行一些操作。本文将介绍如何将邻接矩阵转换为邻接表表示。
class GraphNode:
def __init__(self, val=None, neighbors=None):
self.val = val
self.neighbors= neighbors if neighbors is not None else []
上述代码定义了一个图节点的类,其中节点的值为val,节点相邻的节点则保存在列表neighbors中。
def adjacency_matrix_to_adjacency_list(adj_matrix):
"""
:type adj_matrix: List[List[int]]
:rtype: List[GraphNode]
"""
if not adj_matrix:
return []
rows, cols = len(adj_matrix), len(adj_matrix[0])
nodes = [GraphNode(i) for i in range(rows)]
for i in range(rows):
for j in range(cols):
if adj_matrix[i][j] == 1:
nodes[i].neighbors.append(nodes[j])
return nodes
上述代码定义了一个将邻接矩阵转换为邻接表的函数,其中输入参数adj_matrix为邻接矩阵,返回值为邻接表所代表的图节点列表。函数中首先根据邻接矩阵的行数创建相应数量的图节点,每个节点的值为该节点的下标i。接着遍历邻接矩阵,将有边相连的节点之间建立“相邻”的关系,即将节点j加入节点i的邻居列表中。
下面给出一个示例,演示如何将邻接矩阵转换为邻接表表示。假设有如下的邻接矩阵:
0 1 2 3 4
---------
0| 0 1 0 0 1
1| 1 0 1 1 1
2| 0 1 0 1 0
3| 0 1 1 0 1
4| 1 1 0 1 0
将该邻接矩阵输入adjacency_matrix_to_adjacency_list函数中,即可得到如下的邻接表表示:
[0] -> [1,4]
[1] -> [0,2,3,4]
[2] -> [1,3]
[3] -> [1,2,4]
[4] -> [0,1,3]
上述结果表示了图中各节点之间的相邻关系,可以方便地进行一些图相关的操作。
本文介绍了如何将邻接矩阵转换为邻接表表示,通过定义图节点的类以及转换函数,可以方便地将邻接矩阵转换为邻接表。这种转换可以方便进行图相关的操作,也使图的表示更加灵活。