引言
图是一种复杂的非线性数据结构,广泛应用于各种领域,包括网络路由、社交网络分析、推荐系统等。理解和掌握图算法对于解决实际问题具有重要意义。
1. 图的存储方式
图是由一组顶点和连接这些顶点的边组成的集合。根据边的方向,图可以分为有向图和无向图。顶点可以代表实际问题中的对象,而边则表示对象之间的关系。
1.1 邻接矩阵
邻接矩阵是一种常用的图表示方法,特别是当图中的边比较密集时。下面是一个邻接矩阵的实现示例:
class Graph:
def __init__(self, size):
self.adj_matrix = [[0 for _ in range(size)] for _ in range(size)]
self.size = size
def add_edge(self, v1, v2, weight=1):
self.adj_matrix[v1][v2] = weight
self.adj_matrix[v2][v1] = weight # 如果是无向图
def remove_edge(self, v1, v2):
self.adj_matrix[v1][v2] = 0
self.adj_matrix[v2][v1] = 0 # 如果是无向图
def __str__(self):
return "\n".join([" ".join(map(str, row)) for row in self.adj_matrix])
# 创建图实例
g = Graph(4)
g.add_edge(0, 1)
g.add_edge(0, 2)
g.add_edge(1, 2)
g.add_edge(2, 3)
print(g)