广度优先搜索
广度优先搜索(Breadth-First Search, BFS)是一种 层序遍历 的算法,适用于解决 最短路径、最小步数、状态空间探索 等问题。
BFS 适用于以下场景:
- 求最短路径或最少操作步数(如迷宫最短路径、单词接龙)。
- 状态转换问题(如八数码问题、密码锁破解)。
- 图的连通性判断(如岛屿数量、社交网络好友关系)。
BFS 核心四步框架
- 初始化队列和访问标记
- 队列:存储待处理的节点(通常用
deque
实现)。 - 访问标记:避免重复访问(数组、哈希表或位掩码)。
- 队列:存储待处理的节点(通常用
- 定义状态扩展规则
- 子节点生成:根据问题定义如何从当前状态扩展到下一状态。
- 方向控制:如网格问题中的上下左右移动,或状态转换问题中的操作集合。
- 层序遍历与终止条件
- 逐层处理:每次处理一层的所有节点。
- 终止条件:找到目标状态或队列为空。
- 记录路径或步数(可选)
- 步数统计:每层循环后步数加一。
- 路径回溯:通过父指针字典反向追踪路径。