我的BFS函数中的无限循环 我尝试在C++中实现BFS算法来找出每个节点与源顶点(例如0)的距离,但是在我的函数中好像有一个无限循环。经过一些调试,我发现所有节点都被访问了,但我的队列永远不会变空。为什么呢 #include <bits/stdc++.h> using namespace std; int d[1000]; int visited[1000]; vector <int> adj[1000]; queue<int> que; void bfs(int source) { d[source]=0; visited[source]=1; que.push(source); while(!que.empty()) { int current = que.front(); que.pop(); for (int i=0;i<adj[current].size();i++) { int v=adj[current][i]; if(visited[v]!=1); { visited[v]=1; d[v]=d[current]+1; que.push(v); } } } } int main(){ int E,start,end,n; cin >> n >> E; for (int i=0;i<n;i++) d[i]=-1; for (int i=0;i<n;i++) visited[i]=0; for (int i=0;i<E;i++) { cin >> start >> end; adj[start].push_back(end); adj[end].push_back(start); } bfs(0); for (int i=0;i<n;i++) cout << "d" << i << "= " << d[i] << endl; return 0; } #包括 使用名称空间std; int d[1000]; 国际访问量[1000]; 向量adj[1000]; 排队等候; 无效bfs(整数源) { d[源]=0; 访问[来源]=1; (来源),; 而(!que.empty()) { int current=que.front(); que.pop(); 对于(inti=0;i>n>>E; 对于(int i=0;i>end; 调整[开始]。向后推(结束); 调整[结束]。向后推(开始); } bfs(0); 对于(int i=0;i

我的BFS函数中的无限循环 我尝试在C++中实现BFS算法来找出每个节点与源顶点(例如0)的距离,但是在我的函数中好像有一个无限循环。经过一些调试,我发现所有节点都被访问了,但我的队列永远不会变空。为什么呢 #include <bits/stdc++.h> using namespace std; int d[1000]; int visited[1000]; vector <int> adj[1000]; queue<int> que; void bfs(int source) { d[source]=0; visited[source]=1; que.push(source); while(!que.empty()) { int current = que.front(); que.pop(); for (int i=0;i<adj[current].size();i++) { int v=adj[current][i]; if(visited[v]!=1); { visited[v]=1; d[v]=d[current]+1; que.push(v); } } } } int main(){ int E,start,end,n; cin >> n >> E; for (int i=0;i<n;i++) d[i]=-1; for (int i=0;i<n;i++) visited[i]=0; for (int i=0;i<E;i++) { cin >> start >> end; adj[start].push_back(end); adj[end].push_back(start); } bfs(0); for (int i=0;i<n;i++) cout << "d" << i << "= " << d[i] << endl; return 0; } #包括 使用名称空间std; int d[1000]; 国际访问量[1000]; 向量adj[1000]; 排队等候; 无效bfs(整数源) { d[源]=0; 访问[来源]=1; (来源),; 而(!que.empty()) { int current=que.front(); que.pop(); 对于(inti=0;i>n>>E; 对于(int i=0;i>end; 调整[开始]。向后推(结束); 调整[结束]。向后推(开始); } bfs(0); 对于(int i=0;i,c++,algorithm,graph,shortest-path,breadth-first-search,C++,Algorithm,Graph,Shortest Path,Breadth First Search,,我看到的唯一错误是: if(已访问[v]!=1); 一个分号是你需要删除的!!!:D.P/>我一直在寻找2个小时的问题:D.,谢谢!你使我的一天。@ FoxyZ,你可以考虑在退出循环之前添加一个条件,如果你的所有节点都被访问过或者没有,只要你的图形没有连接!!

,我看到的唯一错误是:

if(已访问[v]!=1);


一个分号是你需要删除的!!!:D.P/>我一直在寻找2个小时的问题:D.,谢谢!你使我的一天。@ FoxyZ,你可以考虑在退出循环之前添加一个条件,如果你的所有节点都被访问过或者没有,只要你的图形没有连接!!