Cod sursa(job #874414)

Utilizator Catah15Catalin Haidau Catah15 Data 8 februarie 2013 13:13:19
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>

using namespace std;

#define PB push_back
#define maxN 100010
#define inf (1 << 30)

int Cost[maxN], N;
queue <int> Q;
vector <int> List[maxN];


void BFS (int nod)
{
    for (int i = 1; i <= N; ++ i) Cost[i] = inf;
    Cost[nod] = 0;
    Q.push (nod);

    while (! Q.empty ())
    {
        int nod2 = Q.front();
        Q.pop ();

        for (int i = 0; i < List[nod2].size(); ++ i)
        {
            int newnod = List[nod2][i];

            if (Cost[newnod] != inf) continue;
            Cost[newnod] = Cost[nod2] + 1;
            Q.push (newnod);
        }
    }
}


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

    int M, S;
    scanf ("%d %d %d", &N, &M, &S);

    while (M --)
    {
        int x, y;
        scanf ("%d %d", &x, &y);

        List[x].PB (y);
    }

    BFS (S);

    for (int i = 1; i <= N; ++ i) if (Cost[i] == inf) printf ("-1 ");
    else printf ("%d ", Cost[i]);

    return 0;
}