Cod sursa(job #1031985)

Utilizator Alexghita96Ghita Alexandru Alexghita96 Data 15 noiembrie 2013 18:43:26
Problema BFS - Parcurgere in latime Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <cstdio>
#include <vector>
#include <memory.h>

#define Nmax 100005

using namespace std;

int N, M, S, lq, L[Nmax], Cost[Nmax], Q[Nmax];
vector <int> A[Nmax];

void Citire()
{
    int n1, n2;
    scanf("%d%d%d", &N, &M, &S);
    for (int i = 1; i <= M; ++i)
    {
        scanf("%d%d", &n1, &n2);
        A[n1].push_back(n2);
    }
    for (int i = 1; i <= M; ++i)
        L[i] = A[i].size();
}

void BFS()
{
    memset(Cost, -1, sizeof(Cost));
    lq = 1;
    Cost[S] = 0;
    Q[1] = S;
    for (int i = 1; i <= lq; ++i)
        for (int j = 0; j < L[Q[i]]; ++j)
            if (Cost[A[Q[i]][j]] == -1)
            {
                Q[++lq] = A[Q[i]][j];
                Cost[Q[lq]] = Cost[Q[i]] + 1;
            }
}

void Afisare()
{
    for (int i = 1; i <= N; ++i)
        printf("%d ", Cost[i]);
}

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

    Citire();
    BFS();
    Afisare();

    return 0;
}