在计算机科学中,图(Graph)是一种非常重要的非线性数据结构,广泛应用于社交网络、路径规划、推荐系统等领域。对于初学者来说,掌握Python图的表示方法是学习图算法的第一步。本文将详细讲解两种最常用的图表示方式:邻接矩阵和邻接表,并提供清晰易懂的代码示例,即使你是编程小白也能轻松上手!

图由顶点(Vertex/Node)和边(Edge)组成。例如,社交网络中的用户就是顶点,好友关系就是边。图可以是有向的(如关注关系)或无向的(如朋友关系)。
邻接矩阵使用一个二维数组来表示图。如果顶点 i 和顶点 j 之间有边,则 matrix[i][j] = 1(或权重值),否则为 0。
优点:查询两个顶点是否相连非常快(O(1) 时间复杂度)
缺点:空间占用大,尤其当图很稀疏时(即边很少)
class GraphMatrix: def __init__(self, num_vertices): self.num_vertices = num_vertices # 初始化一个全0的二维列表 self.matrix = [[0 for _ in range(num_vertices)] for _ in range(num_vertices)] def add_edge(self, u, v, weight=1): """添加一条从u到v的边,weight为权重(默认为1)""" if 0 <= u < self.num_vertices and 0 <= v < self.num_vertices: self.matrix[u][v] = weight # 如果是无向图,还需添加反向边 # self.matrix[v][u] = weight def print_matrix(self): for row in self.matrix: print(row)# 使用示例graph = GraphMatrix(4)graph.add_edge(0, 1)graph.add_edge(1, 2)graph.add_edge(2, 3)graph.print_matrix()邻接表使用一个列表(或字典)来存储每个顶点的邻居。这是更常用、更节省空间的方式,特别适合稀疏图。
优点:节省空间,遍历邻居高效
缺点:判断两顶点是否相连需要遍历(O(degree) 时间)
class GraphList: def __init__(self): self.graph = {} def add_vertex(self, vertex): if vertex not in self.graph: self.graph[vertex] = [] def add_edge(self, u, v, weight=None): """添加边,支持带权重(用于加权图)""" if u not in self.graph: self.add_vertex(u) if v not in self.graph: self.add_vertex(v) # 无向图:双向添加 if weight is None: self.graph[u].append(v) self.graph[v].append(u) else: # 存储为 (邻居, 权重) 元组 self.graph[u].append((v, weight)) self.graph[v].append((u, weight)) def print_graph(self): for vertex in self.graph: print(f"{vertex}: {self.graph[vertex]}")# 使用示例graph = GraphList()graph.add_edge('A', 'B')graph.add_edge('B', 'C')graph.add_edge('C', 'D')graph.print_graph()- 如果你的图是稠密图(边数接近顶点数的平方),使用邻接矩阵更合适。
- 如果是稀疏图(如社交网络、网页链接),强烈推荐使用邻接表,它能显著节省内存。
通过本教程,你已经掌握了Python图的表示方法中最核心的两种技术:邻接矩阵和邻接表。无论你是要实现最短路径算法(如Dijkstra)、深度优先搜索(DFS)还是广度优先搜索(BFS),正确的图表示都是成功的第一步。
记住:没有绝对“最好”的方法,只有“更适合”你当前问题的方法。多练习、多尝试,你会越来越熟练!
关键词回顾:Python图的表示方法、邻接表、邻接矩阵、图数据结构。
本文由主机测评网于2025-12-06发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025123827.html