Cod sursa(job #316058)

Utilizator klamathixMihai Calancea klamathix Data 18 mai 2009 09:37:16
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<cstdio>
#include<vector>

#define MAXN 100001

using namespace std;

int i , j , N , M , S , x , y, coada[MAXN] , back , front = 1 , current , rez[MAXN];
vector <int> A[MAXN];
 
void BFS()
{
     coada[++back] = S;
     
     while(back >= front) {
                current = coada[front++];
                for( i = 0 ; i < A[current].size() ;i++)
                     if( rez[A[current][i]] == -1)
                     {
                         coada[++back] = A[current][i];
                         rez[A[current][i]] = rez[current] + 1;
                     }     
                }
}

int main()
{
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    
    scanf("%d %d %d",&N ,&M ,&S);
    
    for( ; M -- ;)    {
         scanf("%d %d",&x ,&y);
         A[x].push_back(y);
    }
    
    for( i = 1 ; i <= N ; i++) 
         if ( i != S) rez[i] = -1;
          
    BFS();
    
    for( i = 1 ; i <= N ; i++)
         printf("%d ",rez[i]);

return 0;
}