在图论中,图是一种由节点(或顶点)和边组成的非线性数据结构。图的应用非常广泛,包括社交网络、计算机网络、交通系统等。为了方便对图进行操作与分析,我们常常需要使用一些数据结构来存储图的信息,邻接矩阵就是其中一种重要的表示方式。
邻接矩阵是一种二维数组,用来表示图中节点之间的连接关系。对于一个有向或无向图 (G = (V, E)),其邻接矩阵 (A) 是一个 (|V| \times |V|) 的方阵,其中 (|V|) 表示图的顶点数。
class Graph:
def __init__(self, num_vertices):
self.num_vertices = num_vertices
self.adj_matrix = [[0] * num_vertices for _ in range(num_vertices)]
这里我们定义了一个图类 Graph
,包含一个初始化方法。构造函数中传入顶点数作为参数,并创建了一个大小为 (|V|\times |V|) 的二维数组来表示邻接矩阵。
def add_edge(self, v1, v2):
self.adj_matrix[v1][v2] = 1
# 对于有向图,可以不添加这一行。如果需要双向连接,则应同时在 adj_matrix[v2][v1] 中设置为1。
此方法用于添加边。当调用 add_edge
方法并传入两个顶点的索引时,相应位置会被设置为1。
def remove_edge(self, v1, v2):
if self.adj_matrix[v1][v2] == 0:
print("No edge between the vertices")
return
self.adj_matrix[v1][v2] = 0
此方法用于删除边。首先检查该位置是否已经为零,即原本不存在一条连接的边;如果存在,则将对应位置设置为0。
def is_adjacent(self, v1, v2):
return self.adj_matrix[v1][v2] == 1
此方法用于检查两个顶点之间是否存在直接连接。返回值表示是否有边连接这两个顶点。
邻接矩阵是一种简单且直观的图结构表示方法,适用于各种图的操作和分析任务。尽管对于稀疏图而言它可能会占用较多的存储空间,但在某些应用场景中(例如完全图),其优势更为明显。通过上述实现代码示例,我们可以清晰地看到如何在程序中使用邻接矩阵来模拟图,并进行基本操作。