Cod sursa(job #1227442)

Utilizator ConstantinPetroviciPetrovici Constantin ConstantinPetrovici Data 10 septembrie 2014 16:29:33
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <cstdio>
#include <queue>
#include <vector>

const int MAX=100007;
#define pb push_back

using namespace std;

queue <int> q;
vector <int> gr[MAX];
int d[MAX]  ;

int main()
{
    freopen ("bfs.in" , "r" , stdin );
    freopen ("bfs.out" , "w" , stdout );
    int n , m , s ;
    scanf ("%d %d %d" , &n ,&m , &s );
    for ( int i = 1 ; i <= m ; ++i ){
        int x , y ;
        scanf ("%d %d" , &x , &y );
        gr[ x ].pb( y ) ;
    }
    q.push(s);
    d [ s ] = 1 ;
    while ( not q.empty ( ) ){
        int w=q.front();
        q.pop();
        for ( auto x : gr[w] )
        if ( d[x] == 0 ){
                        d[x]=d[w]+1;
                        q.push(x);
                        }
    }
    for ( int i = 1 ; i <= n ; ++i )
        printf ("%d " , ( d[i] == 0 )?( -1 ) : ( d [ i ] - 1 )  );
    return 0;
}