Cod sursa(job #796067)

Utilizator gallexdAlex Gabor gallexd Data 10 octombrie 2012 15:42:37
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <cstdio>
#include <vector>
using namespace std;

#define LMAX 100010

int N, M, S;
vector<int> V[LMAX];
int C[LMAX], Q[LMAX], viz[LMAX];

void bfs() {
    int L = 1, I;
    C[S]=0;
    Q[0]=S;
    viz[S]=true;

    for (int i=0; i<L; ++i) {
        I = Q[i];
        for (int j=0, e=V[I].size(); j<e; ++j)
            if (!viz[ V[I][j] ]) {
                viz[V[I][j]] = true;
                Q[L] = V[I][j];
                C[Q[L++]] = C[I]+1;
            }
    }
}

int main () {

    int x,y;

    freopen("bfs.in","rt",stdin);
    freopen("bfs.out","wt",stdout);

    scanf("%d %d %d", &N, &M, &S);
    for (int i=0; i<M; ++i) {
        scanf("%d %d", &x, &y);
        V[x].push_back(y);
    }

    bfs();
    for (int i=1; i<=N; ++i)
        if (!viz[i]) printf("-1 ");
        else printf("%d ", C[i]);

    return 0;
}