Cod sursa(job #637432)

Utilizator KaLoo1992Andrei Madalin KaLoo1992 Data 20 noiembrie 2011 14:26:44
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include<stdio.h>
#include<vector>
using namespace std;
vector <int> vecini[100010];
unsigned int list[100010],li[100010],sel[10010],el_act,ult_el,m=0;
void bf(int x){
     unsigned int i;
     int nod;
     list[1]=x;
     sel[x]=1;
     el_act=1;ult_el=1;
     li[x]=0;
     while(el_act<=ult_el){
        nod=list[el_act];
        for(i=0;i<vecini[nod].size();i++){m++;
           if(!sel[vecini[nod][i]]){
              list[++ult_el]=vecini[nod][i];
              li[list[ult_el]]=li[list[vecini[nod][i]]]+1;
              sel[vecini[nod][i]]=1;
           }}
        el_act++;
     }
}
void init(int n){
      for(int i=1;i<=n;i++)
        li[i]=-1;
}
int main(){
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    int n,m,s,x,y;
    scanf("%d",&n);scanf("%d",&m);scanf("%d\n",&s);
    for(int i=0;i<m;i++){
      scanf("%d",&x);scanf("%d\n",&y);
      vecini[x].push_back(y);
    }
        init(n);
       bf(s);
       for(int i=1;i<=n;i++){
        printf("%d ",li[i]);
       }
    return 0;
}