2015-11-13 2 views
3

Я пытаюсь реализовать алгоритм BFS на C++, чтобы найти расстояние каждого узла от исходной вершины (например, 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

Смежные вопросы