Cod sursa(job #283632)

Utilizator victorsbVictor Rusu victorsb Data 19 martie 2009 14:25:56
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <cstdio>
#include <queue>
#include <vector>

using namespace std;

#define FIN "bfs.in"
#define FOUT "bfs.out"
#define MAX_N 100015
#define PB push_back
#define SZ(A) (int)((A).size())

int N, M, S;
vector<int> G[MAX_N];
int D[MAX_N];

void read() {
    scanf("%d %d %d", &N, &M, &S);
    for (int i = 1; i <= M; ++i) {
        int a, b;
        scanf("%d %d", &a, &b);
        G[a].PB(b);
    }
}

void BFS(int start) {
    queue<int> Q;
    memset(D, -1, sizeof(D));
    D[start] = 0;
    Q.push(start);

    while (!Q.empty()) {
        int nod = Q.front();
        Q.pop();
        for (int i = 0; i < SZ(G[nod]); ++i)
            if (D[G[nod][i]] == -1) {
                D[G[nod][i]] = D[nod] + 1;
                Q.push(G[nod][i]);
            }
    }
}

void solve() {
    BFS(S);
    for (int i = 1; i <= N; ++i)
        printf("%d ", D[i]);
    printf("\n");
}

int main() {
    freopen(FIN, "r", stdin);
    freopen(FOUT, "w", stdout);
    read();
    solve();
    return 0;
}