Cod sursa(job #1694581)

Utilizator xtreme77Patrick Sava xtreme77 Data 25 aprilie 2016 17:01:50
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
/**
 * Code by Patrick Sava
 * "Spiru Haret" National College of Bucharest
 **/

# include <bits/stdc++.h>

const char IN [ ] =  "bfs.in" ;
const char OUT [ ] = "bfs.out" ;

using namespace std ;

# define pb push_back
# define mp make_pair
# define FORN( a , b , c ) for ( register int a = b ; a <= c ; ++ a )
# define FORNBACK( a , b , c ) for ( register int a = b ; a >= c ; -- a )

ifstream fin ( IN ) ;
ofstream fout ( OUT ) ;

const int MAX = 1e5 + 14 ;

queue < int > Q ;
vector < int > gr [ MAX ] ;
int dist [ MAX ] ;

int main()
{
    int n , m , sursa ;
    fin >> n >> m >> sursa ;
    while ( m -- ) {
        int a , b ;
        fin >> a >> b ;
        gr [ a ].pb ( b ) ;
    }
    ///memset ( dist , 0x3f , sizeof ( dist ) ) ;
    FORN ( i , 1 , n ) {
        dist [ i ] = 1 << 29 ;
    }
    dist [ sursa ] = 0 ;
    Q.push ( sursa ) ;
    while ( !Q.empty() )
    {
        int nod = Q.front() ;
        Q.pop() ;
        for ( auto vecin : gr [ nod ] ){
            if ( dist [ vecin ] > dist [ nod ] + 1 ) {
                dist [ vecin ] = dist [ nod ] + 1 ;
                Q.push ( vecin ) ;
            }
        }
    }
    FORN ( i , 1 , n ) {
        if ( dist [ i ] == 1 << 29 ) {
            fout << -1 << ' ' ;
        }
        else {
            fout << dist [ i ] << ' ' ;
        }
    }
    return 0;
}