在计算机科学中,图是一种非常重要的数据结构,广泛应用于社交网络、路径规划、推荐系统等领域。而图的遍历则是处理图问题的基础操作。本文将用通俗易懂的方式,手把手教你使用Python实现两种核心的图遍历算法:深度优先搜索(DFS)和广度优先搜索(BFS)。即使你是编程小白,也能轻松掌握!
图由节点(顶点)和边组成。例如,城市之间的航班网络就是一个图:每个城市是节点,每条航线是边。
在Python中,我们通常用邻接表来表示图——即用字典,其中键是节点,值是该节点连接的所有邻居列表。
DFS 的思想是:从一个起点出发,沿着一条路径尽可能深入,直到无法继续为止,然后回溯并尝试其他路径。它像走迷宫时“一条路走到黑”。
def dfs_recursive(graph, node, visited): if node not in visited: print(node) # 访问当前节点 visited.add(node) for neighbor in graph[node]: dfs_recursive(graph, neighbor, visited)# 示例图graph = { 'A': ['B', 'C'], 'B': ['D', 'E'], 'C': ['F'], 'D': [], 'E': ['F'], 'F': []}visited = set()dfs_recursive(graph, 'A', visited) def dfs_iterative(graph, start): visited = set() stack = [start] while stack: node = stack.pop() if node not in visited: print(node) visited.add(node) # 将邻居逆序压入栈,保证输出顺序与递归一致 for neighbor in reversed(graph[node]): if neighbor not in visited: stack.append(neighbor)# 调用示例dfs_iterative(graph, 'A') BFS 的思想是:从起点开始,先访问所有直接邻居,再访问邻居的邻居,一层一层向外扩展。它像水波扩散一样。
from collections import dequedef bfs(graph, start): visited = set() queue = deque([start]) while queue: node = queue.popleft() if node not in visited: print(node) visited.add(node) for neighbor in graph[node]: if neighbor not in visited: queue.append(neighbor)# 调用示例bfs(graph, 'A') 通过本教程,你已经掌握了Python图遍历的两种核心方法:深度优先搜索DFS和广度优先搜索BFS。它们是解决更复杂图论问题(如最短路径、连通性分析)的基石。建议你动手运行上面的代码,修改图结构,观察输出结果,加深理解。
掌握这些基础算法,是你迈向高级图算法教程的第一步!
本文由主机测评网于2025-12-15发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025128210.html