2017-09-18 8 views
-1

Dans ce code je veux juste visiter le noeud et compter les bords. Pour la 1ère fois ça semble bien mais quand je passe de nouveaux nœuds et de nouveaux bords ça donne 0 compte. Je découvre que sa condition n'est pas vraie pour les nœuds et les arêtes suivants. C'est ma première implémentation de BFS.J'essaie d'implémenter BFS et de compter tous les nœuds visités à travers les bords. Mais mon code me donne 0 compte excepté le 1er

#include<bits/stdc++.h> 
using namespace std; 
vector<int>v[1000]; 
int level[1000]; 
bool vis[1000]; 
void bfs(int s,int E) 
{ 
int count=0; 
queue<int>q; 
q.push(s); 
level[s]=0; 
vis[s]=true; 
while(!q.empty()) 
{ 
    int p=q.front(); 
    q.pop(); 
    for(int i=0;i<v[p].size();i++) 
    { 
     if(vis[v[p][i]] == false) 
     { 
      level[v[p][i]] = level[p]+1; 
      q.push(v[p][i]); 
      vis[v[p][i]] = true; 
      count++; 
     } 
    } 
} 
cout<<count<<endl; 
} 

int main() 
{ 
int N,E,x,y,size; 
while(scanf("%d %d",&N,&E)==2) 
{ 
    for(int i=1;i<=E;i++) 
    { 
     scanf("%d %d",&x,&y); 
     v[x].push_back(y); 
     v[y].push_back(x); 
    } 
    int s=0; 
    bfs(s); 
} 
return 0; 
} 

Répondre

1

Vous ne réinitialisez pas que les variables qui vous avez utilisé comme votre liste de contiguïté v, level et vis.

Vous devez les réinitialiser à une valeur par défaut avant de travailler sur un graphique différent, car les valeurs des graphiques précédents ne sont pas souhaitées.

Vous pouvez simplement lancer une boucle, avant chaque entrée:

for(int i=0;i<N;i++) 
{ 
    v[i].clear(); 
    vis[i]=0; 
    level[i]=-1; 
}