广度优先遍历(BFS)是一种按层级逐层访问节点的图/树遍历算法,核心思想是使用队列实现"先进先出"的访问顺序,适合解决最短路径、层级关系等问题。 其典型应用包括社交网络的好友推荐、迷宫最短路径搜索等场景。
-
算法原理
- 从起始节点开始,先访问其所有直接相邻节点(第一层)
- 将已访问节点存入队列,按入队顺序逐个处理下一层节点
- 通过标记已访问节点避免重复处理,直到队列为空时遍历完成
-
代码实现步骤
(1) 初始化空队列和访问标记数组
(2) 将起始节点入队并标记为已访问
(3) 循环执行:出队一个节点→处理该节点→将其未访问的邻接节点入队
(4) 队列为空时终止循环 -
复杂度与优化
- 时间复杂度:O(V+E)(V为顶点数,E为边数)
- 空间复杂度:O(V)(最坏情况需存储所有节点)
- 优化方向:双向BFS、启发式搜索(如A*算法)可提升特定场景效率
-
典型问题示例
- 二叉树层级遍历:逐层输出节点值
- 矩阵迷宫:找出入口到出口的最短步数
- 社交网络:计算两人之间的最短好友关系链
该算法通过系统性的层级扩展确保能找到最优解,实际编码时需注意处理环路和 disconnected 图的情况。对于超大规模数据,可结合并行计算框架进行分布式处理。