随笔 - 118  文章 - 0  评论 - 0  阅读 - 24162

计蒜客:最短路简化版(BFS)

BFS可以解决无权图的单源最短问题

注意在queue中用结束标识来节约队列空间。也可以用vector来实现队列,用[left,right]控制队列。

复制代码
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n, m, c;
 4 vector<int> graph[1005];
 5 vector<bool> visited(1005, false);
 6 vector<int> level(1005, 0);
 7 queue<int> q;
 8 void bfs(int l) {
 9     if (q.empty()) {
10         return;
11     }
12     q.push(-1); //加入结束标识
13     while(!q.empty() && q.front() != -1) {
14         int p = q.front();
15         level[p] = l;
16         q.pop();
17         //得到下一批访问节点
18         for (int i : graph[p]) {
19             if (!visited[i]) {
20                 q.push(i);
21                 visited[i] = true;
22             }
23         }
24     }
25     q.pop(); //弹出结束标识-1
26     bfs(l + 1);
27 }
28 int main() {
29     cin >> n >> m >> c;
30     int x, y;
31     while (m --) {
32         cin >> x >> y;
33         graph[x].push_back(y);
34         graph[y].push_back(x);
35     }
36     q.push(c);
37     visited[c] = true;
38     bfs(0);
39     for (int i = 1; i <= n; ++ i) {
40         cout << level[i] << endl;
41     }
42 }
复制代码

 

posted on   Coder何  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示