# 应用场景
找到的路径一定是最短的,但空间复杂度可能大于 DFS
# 代码框架
//起点 start 到终点 target 的最近距离
int BFS(Node start, Node target) {
queue<Node> q; // 核心数据结构
set<Node> visited; // 避免走回头路
q.push(start); // 将起点加入队列
visited.insert(start); int step = 0; // 记录扩散的步数
while (q not empty) {
int sz = q.size();`
/* 将当前队列中的所有节点向四周扩散 */
for (int i = 0; i < sz; i++) {
Node cur = q.front();
q.pop();
/* 划重点:这里判断是否到达终点 */
if (cur is target) return step;
/* 将 cur 的相邻节点加入队列 */
for (Node x : cur.adj()) {
if (x not in visited) {
q.push(x);
visited.insert(x);
}
}
/* 划重点:更新步数在这里 */
step++;
}
}