Cod sursa(job #341384)

Utilizator reversergabriel reverser Data 18 august 2009 13:36:21
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include <queue>
#include <vector>

using namespace std;

int N;
vector< vector<int> > G;
vector<int> custo;

void bfs(int start) {
    queue<int> q;
    q.push(start);
    custo = vector<int>(N, -1);
    custo[start] = 0;

    while (!q.empty()) {
        int v = q.front();
        q.pop();

        for (vector<int>::iterator it = G[v].begin();
                it != G[v].end(); it++) {
            if (custo[*it] == -1) {
                custo[*it] = custo[v] + 1;
                q.push(*it);
            }
        }
    }
}

main() {
    int n, m, s, i;
    int x, y;

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

    scanf("%d%d%d", &n, &m, &s);
    N = n + 1;
    G = vector< vector<int> >(N, vector<int>());

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

    bfs(s);

    printf("%d", custo[1]);

    for (i = 2; i <= n; i++) {
        printf(" %d", custo[i]);
    }

    //printf("\n");
}