Cod sursa(job #1049195)

Utilizator alexdmotocMotoc Alexandru alexdmotoc Data 7 decembrie 2013 00:26:52
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

#define maxN 100005

vector <int> muchii[maxN];
queue <int> Q;
int cost[maxN];
bool viz[maxN];

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

    int N, M, S, x, y;

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

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

    for(int i = 0; i < N; ++i) {
        cost[i] = -1;
    }

    viz[S - 1] = true;
    cost[S - 1] = 0;
    Q.push(S);

    while(!Q.empty()) {
        int node = Q.front();
        Q.pop();

        for(unsigned int i = 0; i < muchii[node].size(); ++i) {
            int currNode = muchii[node][i];

            if(viz[currNode - 1])
                continue;

            viz[currNode - 1] = true;
            cost[currNode - 1] = cost[node - 1] + 1;
            Q.push(currNode);
        }
    }

    for(int i = 0; i < N; ++i)
        printf("%d ", cost[i]);

    return 0;
}