一栋大楼发生了火灾,你站在第 3 层的 305 房间。消防员需要从你所在的位置出发,逐层搜索所有被困人员。
消防员的搜索策略是:
第1步:先搜索 305 房间(距离 0)
第2步:搜索与 305 直接相邻的所有房间 — 304、306、楼梯口(距离 1)
第3步:搜索距离为 2 的房间 — 303、307、2 楼楼梯口、4 楼楼梯口(距离 2)
第4步:搜索距离为 3 的房间...以此类推
一层一层向外扩散,先近后远!
这种搜索方式有一个重要性质:第一次到达某个房间时,走过的路径一定是最短的。因为 BFS 先搜索近处,后搜索远处。
BFS = 一层一层扩散,第一次到达就是最短路径!
💡 BFS 的核心特征
① 使用队列(Queue):先进先出,保证先发现的节点先被处理
② 层次遍历:先访问距离为 1 的所有节点,再访问距离为 2 的,以此类推
③ 标记已访问:防止重复访问,用 visited 数组记录
④ 最短路径保证:在无权图中,BFS 第一次到达终点的路径一定是最短路径