Cod sursa(job #1025753)

Utilizator gallexdAlex Gabor gallexd Data 10 noiembrie 2013 15:31:29
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
#define LMAX 100010

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

void bsf() {
    Q[0] = S;
    L = 1;
    viz[S] = true;
    C[S] = 0;

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

void citire() {
    scanf("%d %d %d", &N, &M, &S);
    for (int x, y; M; --M) {
        scanf("%d %d", &x, &y);
        V[x].push_back(y);
    }
}

int main () {

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

    memset(C, -1, sizeof(C));
    citire();
    bsf();
    for (int i=1; i<=N; ++i)
        printf("%d ", C[i]);

    return 0;
}