Cod sursa(job #1889233)

Utilizator catu_bogdan_99Catu Bogdan catu_bogdan_99 Data 22 februarie 2017 17:15:42
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <cstdio>
#include <queue>
#include <vector>
using namespace std;

#define NMAX 100005
#define INFI 0x3f3f3f3f

int D[ NMAX ];
queue < int > Q;
vector < int > v[ NMAX ];

void BFS ( int start ) {

    int n, m, i;

    D[ start ] = 0;
    Q.push( start );

    while ( !Q.empty() ) {
        m = Q.front();
        Q.pop();
        n = v[ m ].size();
        for ( i = 0; i < n; ++i ) {
            if ( D[ v[ m ][ i ] ] == INFI ) {
                D[ v[ m ][ i ] ] = D[ m ] + 1;
                Q.push( v[ m ][ i ] );
            }
        }
    }

}


int main () {

    freopen( "bfs.in", "r", stdin );
    freopen( "bfs.out", "w", stdout );

    int n, m, i, j, x, y, s, t;

    scanf( "%d%d%d",&n,&m,&s );
    while ( m-- ) {
        scanf( "%d%d",&x,&y );
        v[ x ].push_back ( y );
    }

    for ( i = 1; i <= n; ++i ) {
        D[ i ] = INFI;
    }

    BFS ( s );

    for ( i = 1; i <= n; ++i ) {
        if ( D[ i ] < INFI ) printf( "%d ",D[ i ] );
        else printf( "-1 " );
    }

    return 0;

}