在计算机科学中,图(Graph)是一种非常重要的非线性数据结构,广泛应用于社交网络、路径规划、推荐系统等领域。本教程将带你从零开始,用Python图数据结构构建一个简单的图,并学习其基本操作和遍历方法。即使你是编程小白,也能轻松上手!
图由节点(Vertices 或 Nodes)和边(Edges)组成。节点代表实体,边代表实体之间的关系。例如,在社交网络中,每个人是一个节点,好友关系就是边。

在Python中,我们通常使用以下两种方式来表示图:
对于稀疏图(边远少于节点数平方),邻接表Python实现更节省空间,因此我们重点讲解邻接表。
下面是一个简单的无向图类实现:
class Graph: def __init__(self): # 使用字典存储图,键是节点,值是邻居列表 self.graph = {} def add_vertex(self, vertex): """添加节点""" if vertex not in self.graph: self.graph[vertex] = [] def add_edge(self, vertex1, vertex2): """添加无向边""" # 确保两个节点都存在 self.add_vertex(vertex1) self.add_vertex(vertex2) # 添加双向连接 self.graph[vertex1].append(vertex2) self.graph[vertex2].append(vertex1) def print_graph(self): """打印图的结构""" for vertex in self.graph: print(f"{vertex}: {self.graph[vertex]}")使用示例:
# 创建图实例g = Graph()# 添加边g.add_edge('A', 'B')g.add_edge('A', 'C')g.add_edge('B', 'D')g.add_edge('C', 'D')g.print_graph()# 输出:# A: ['B', 'C']# B: ['A', 'D']# C: ['A', 'D']# D: ['B', 'C']遍历是图操作的核心。图遍历算法主要有两种:
我们在上面的 Graph 类中添加 DFS 和 BFS 方法:
from collections import dequeclass Graph: # ...(前面的代码保持不变)... def dfs(self, start, visited=None): """深度优先搜索""" if visited is None: visited = set() visited.add(start) print(start, end=' ') for neighbor in self.graph.get(start, []): if neighbor not in visited: self.dfs(neighbor, visited) def bfs(self, start): """广度优先搜索""" visited = set() queue = deque([start]) visited.add(start) while queue: vertex = queue.popleft() print(vertex, end=' ') for neighbor in self.graph.get(vertex, []): if neighbor not in visited: visited.add(neighbor) queue.append(neighbor)测试遍历:
g = Graph()g.add_edge('A', 'B')g.add_edge('A', 'C')g.add_edge('B', 'D')g.add_edge('C', 'D')print("DFS:", end=' ')g.dfs('A') # 可能输出:A B D Cprint("\nBFS:", end=' ')g.bfs('A') # 可能输出:A B C D通过本教程,你已经掌握了Python图数据结构的基础知识,包括图的表示(特别是邻接表Python实现)、构建以及两种核心的图遍历算法(DFS 和 BFS)。这些是解决更复杂图问题(如最短路径、连通分量等)的基石。
建议你动手敲一遍代码,修改节点和边,观察输出结果,加深理解。后续可以探索有向图、带权图以及 Dijkstra、Floyd 等高级算法。
记住,掌握图的表示方法是迈向图算法高手的第一步!
本文由主机测评网于2025-12-20发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20251210496.html