Cod sursa(job #1656151)

Utilizator wilversingsMarius Aiordachioaei wilversings Data 18 martie 2016 20:12:01
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <cstdio>
#include <bitset>
#include <vector>
#include <cstdlib>
#include <queue>

using namespace std;

const int NMAX = 100002;

vector<int> *graph;
queue<int> Q;
int pathMinimum[NMAX];

int main () {

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

    int N, M, source;

    scanf ("%d%d%d", &N, &M, &source);

    graph = new vector<int>[N + 1];

    while (M--) {
        int a, b;

        scanf ("%d%d", &a, &b);
        graph[a].push_back(b);

    }

    Q.push (source);
    pathMinimum[source] = 1;
    while (!Q.empty()) {
        int node;

        node = Q.front ();
        Q.pop();
        for (auto i : graph[node])
        if (!pathMinimum[i]) {
            pathMinimum[i] = pathMinimum[node] + 1;
            Q.push(i);
        }

    }

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

}