Cod sursa(job #849121)

Utilizator bogdan93Grigorescu Bogdan bogdan93 Data 6 ianuarie 2013 14:45:10
Problema BFS - Parcurgere in latime Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <cstdio>
#include <cstdlib>
#include <vector>

#define nmax 100000
using namespace std;

vector<int> vecini[nmax];
int N , M , S ;
int c[nmax] , d[nmax] , vizitat[nmax] ;

void BFS ( int x )
{
    int p , u ;
    p = u = 1;
    c[p] = x;
    vizitat[x] = 1;
    while ( p <= u )
    {
        x = c[p];
        p++;
        for ( int i = 0 ; i < vecini[x].size() ; i++ )
        {
            int y = vecini[x][i];
            if ( !vizitat[y] )
                {
                    vizitat[y] = 1 ;
                    c[++u] = y ;
                    d[y] = d[x] + 1 ;
                }
        }
    }
}


int main ()
{
    FILE *fin , *fout ;

    fin = fopen ( "bfs.in" , "rt" );
    fout = fopen ( "bfs.out" , "wt" );

    fscanf ( fin , "%d %d %d" , &N , &M , &S );

    for ( int i = 1 ; i <= M ; i++ )
    {
        int a , b ;
        fscanf ( fin , "%d %d" , &a , &b );
        vecini[a].push_back(b);
    }



    int x = S ;

    BFS ( x );

    for ( int i = 1 ; i <= N ; i++ )
        if ( i == S ) fprintf ( fout , "0 " ) ;
            else if ( !d[i] ) fprintf ( fout , "-1 " ) ;
                    else fprintf ( fout , "%d " , d[i] );

    fclose ( fin );
    fclose ( fout );

    return 0;


}