计蒜客:最短路简化版(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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!