2015-11-13 58 views
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; 
} 

回答

6

我看到的唯一錯誤是::

if(visited[v]!=1);

分號是所有你需要刪除! :D

+0

我一直在試圖找出問題出現在哪裏2小時:D。謝謝!你讓我今天一整天都感覺很好。 – FoxyZ

+0

@FoxyZ你可以考慮在退出循環之前添加一個條件,如果你所有的節點都被訪問過了,以防萬一你的圖沒有連接! – user007