🐵指尖猴全新升级
第18课:广度优先搜索BFS
🌊

广度优先搜索BFS

一层层向外扩散,像水波荡开!

📖知识引入

🌊BFS思想
先访问离起点近的点,再一层一层向外扩散
🔄队列驱动
出队一个点,把它的未访问邻居全部入队,循环到队空
📏最短层数
无权图中第一次到达某点时的层数,就是到它的最短距离
⚖️DFS与BFS
DFS靠递归栈走得深,BFS靠队列铺得广,两兄弟形影不离
💡
无权图求最短路,BFS就是标准答案——第一次走到的那条路一定最短

🔍BFS记录最短距离

#include <queue>
using namespace std;

int dist[N];             // 起点到各点的距离

void bfs(int start) {
    queue<int> q;
    q.push(start);
    dist[start] = 0;
    while (!q.empty()) {
        int u = q.front(); q.pop();
        for (int v : g[u])
            if (dist[v] == -1) {      // -1 表示没走过
                dist[v] = dist[u] + 1;  // 比上一层多一步
                q.push(v);
            }
    }
}

dist数组存起点到每点的距离,-1表示还没走过。

🎯小测验

第1题:BFS要借助什么数据结构?

第2题:无权图求最短边数应该用?

第3题:BFS的访问顺序像什么?

📝本课知识点

  • ✓BFS=队列+逐层
  • ✓无权图最短路首选
  • ✓dist数组记距离
第18课完成!继续探索下一课吧 🚀