Cod sursa(job #603878)

Utilizator stay_awake77Cangea Catalina stay_awake77 Data 18 iulie 2011 23:35:07
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <fstream>
#include <queue>
#include <vector>
#include <algorithm>
#include <cstring>

#define NMAX 100001
#define INF (1<<30)
#define pb push_back
#define mp make_pair

#define nod first
#define dist second

using namespace std;

ifstream in("bfs.in");
ofstream out("bfs.out");

int N, M, Sursa, Dist[NMAX], x, y;
queue< pair< int, int > > Q;
vector< int > G[NMAX];
bool USED[NMAX];

void BF()
{
    while( !Q.empty() )
    {
        for( vector< int >::iterator Vecin = G[(Q.front()).nod].begin(); Vecin != G[(Q.front()).nod].end(); Vecin++ )
            if( !USED[*Vecin] )
            {
                USED[*Vecin] = true;
                Q.push( mp( *Vecin, (Q.front()).dist + 1 ) );
                Dist[*Vecin] = (Q.front()).dist + 1;
            }

        Q.pop();
    }
}

int main()
{
    in >> N >> M >> Sursa;
    while( M-- )
    {
        in >> x >> y;
        G[x].pb( y );
    }

    for( int i = 1; i <= N; i++ ) Dist[i] = INF;
    memset( USED, false, sizeof(USED) );

    Dist[Sursa] = 0;
    USED[Sursa] = true;
    Q.push( mp( Sursa, 0 ) );

    BF();

    for( int i = 1; i <= N; i++ )
        ( Dist[i] == INF ) ? out << "-1 " : out << Dist[i] << ' ';
    out << '\n';

    return 0;
}