📅  最后修改于: 2023-12-03 15:09:08.147000             🧑  作者: Mango
邻接列表和邻接矩阵是表示图的常用方法。邻接列表是以节点为索引的列表,每个节点再对应一个节点列表,表示与该节点相连的节点。而邻接矩阵是一个方阵,其中的每个值表示两个节点之间是否存在一条边。邻接矩阵相比邻接列表有更快的查询速度,但需要更多的空间。
本文介绍如何将邻接列表转换为邻接矩阵,以便于在代码中使用邻接矩阵的优势。
以下为Python代码,将邻接列表转换为邻接矩阵:
def adj_list_to_matrix(adj_list):
"""
将邻接列表转换为邻接矩阵
:param adj_list: 邻接列表,格式为字典,key为节点,value为相邻节点列表
:return: 邻接矩阵,格式为二维列表,每个元素为0或1
"""
nodes = sorted(adj_list.keys())
n = len(nodes)
matrix = [[0]*n for _ in range(n)]
for i in range(n):
node = nodes[i]
neighbors = adj_list[node]
for neighbor in neighbors:
j = nodes.index(neighbor)
matrix[i][j] = 1
matrix[j][i] = 1
return matrix
其中,adj_list
为邻接列表,格式为字典,key为节点,value为相邻节点列表。nodes
为邻接列表中所有的节点,按照字典序排序。n
为节点数目。matrix
为邻接矩阵,先将所有元素初始化为0。接着从第一个节点开始遍历,对于每个节点,将其与相邻节点的邻接矩阵位置设为1。由于邻接矩阵是对称的,所以需要同时修改两个方向上的位置。
邻接列表和邻接矩阵各有优缺点,可以根据实际情况灵活使用。当需要进行频繁的节点查询时,邻接矩阵相比邻接列表更加适用。将邻接列表转换为邻接矩阵的方法简单易懂,是代码实现的重要基础之一。