图是一种非常强大的数据结构,用于表示对象(顶点)以及它们之间的关系(边)。在图论中,邻接矩阵是表示图的一种常用方式。一个邻接矩阵是一个二维数组,其中的元素表示图中任意两个顶点之间是否存在一条边。在本文中,我们将通过几个Python代码示例来演示如何将原始的边列表转换为邻接矩阵。
边列表理解
边列表是图的一种简单表现形式,它是顶点对的集合,每个对代表图中的一条边。例如,边列表 [(0, 1), (1, 2), (2, 0)]
表示一个三角形图。
转换为邻接矩阵
为了将边列表转换为邻接矩阵,我们需要执行以下步骤:
- 确定图中顶点的数量。
- 创建一个二维数组(列表),初始时没有边。
- 遍历边列表,对于每一条边,更新二维数组的相应元素。
示例1: 无权无向图的邻接矩阵
# 定义边列表
edges = [(0, 1), (1, 2), (2, 0), (1, 3)]
# 确定图中的最大顶点索引
num_nodes = max(max(edge) for edge in edges) + 1
# 创建邻接矩阵,初始化为0
adj_matrix = [[0 for _ in range(num_nodes)] for _ in range(num_nodes)]
# 填充邻接矩阵
for start, end in edges:
adj_matrix[start][end] = 1
adj_matrix[end][start] = 1 # 无向图是对称的
# 打印邻接矩阵
for row in adj_matrix:
print(row)
示例2: 有权无向图的邻接矩阵
# 定义带权重的边列表
edges = [(0, 1, 10), (1, 2, 20), (2, 0, 30), (1, 3, 40)]
# 确定图中的最大顶点索引
num_nodes = max(max(start, end) for start,