Cod sursa(job #1974531)

Utilizator VladGhetinaVlad Ghetina VladGhetina Data 27 aprilie 2017 22:35:29
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>

using namespace std;

#define IN "bfs.in"
#define OUT "bfs.out"
#define pb push_back

vector<int> G[100009];
queue<int>Q;

int n , m , ST;
int P[100009];

void Read()
{
    int i , x , y;

    scanf ( "%d%d%d" , &n , &m , &ST );

    for ( i = 1 ; i <= m ; i ++ ){
            scanf ( "%d%d" , &x , &y );
            G[x].pb(y);

    }
}

void Init()
{
    memset (P,-1,sizeof(P));
}

void BFS(int x)
{
    int nod , i;

    Init();

    P[x] = 0;
    Q.push(x);

    while ( !Q.empty() )
    {
        nod = Q.front();

        for ( i = 0 ; i < G[nod].size() ; i ++ )
            if ( P[G[nod][i]] == -1 )
                P[G[nod][i]] = P[nod]+1 , Q.push(G[nod][i]);

        Q.pop();

    }

}

void Solve()
{
    int i;

    BFS(ST);

    for ( i = 1 ; i <= n ; i ++ )
        printf ( "%d " , P[i] );
}


int main()
{
    freopen ( IN , "r" , stdin );
    freopen ( OUT , "w" , stdout );

    Read();
    Solve();
}