Cod sursa(job #317341)

Utilizator mathboyDragos-Alin Rotaru mathboy Data 23 mai 2009 11:59:10
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <cstdio>
#include <vector>
#define MaxN 100002
using namespace std;
vector <int> G[MaxN];
int coada[MaxN];
int prim,i,x,S,N,M,y,ultim,Suma[MaxN],viz[MaxN];
int BFS()
{   viz[S]=1;
    Suma[S]=0;
    coada[0]=S;//initializez coada cu varful de start
    while(prim <= ultim)
     {
       x=coada[ prim++ ];//extrag un element din coada
       for(i=0; i<G[x].size(); ++i)
          
            if( !viz[ G[x][i] ] )
            { viz[ G[x][i] ]=1;
              Suma[ G[x][i] ]=Suma[x]+1;
              coada[ ++ultim ]=G[x][i];//il plasez in coada
            }
         
    }
}               
    
int main()
{
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    scanf("%d %d %d",&N,&M,&S);
    for(i=1;i<=M;i++)
      {
       scanf("%d %d",&x,&y);
       G[x].push_back(y);
      }
    for(i=1; i<=N; ++i) Suma[i]=-1;
    BFS();  
    for(i=1; i<=N; ++i)
    printf("%d ",Suma[i]);
    return 0;
}