第18课:广度优先搜索BFS
进度 0/24
🌊
广度优先搜索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课完成!继续探索下一课吧 🚀
