3
我想在C++中實現BFS算法以找到每個節點與源頂點(例如0)的距離,但似乎在我的函數中存在無限循環。經過一些調試後,我發現所有節點都被訪問,但是我的隊列永遠不會變空。這是爲什麼?在我的BFS函數中的無限循環
#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;
}
我一直在試圖找出問題出現在哪裏2小時:D。謝謝!你讓我今天一整天都感覺很好。 – FoxyZ
@FoxyZ你可以考慮在退出循環之前添加一個條件,如果你所有的節點都被訪問過了,以防萬一你的圖沒有連接! – user007