Cod sursa(job #1109949)

Utilizator Alexghita96Ghita Alexandru Alexghita96 Data 17 februarie 2014 18:45:53
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <cstdio>
#include <vector>
#include <queue>

#define Nmax 100005

using namespace std;

int N, M, S, Drum[Nmax];
vector <int> G[Nmax];

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

void BFS()
{
    int nod;
    queue <int> Q;
    vector <int> :: iterator it;
    Q.push(S);
    Drum[S] = 0;
    while (!Q.empty())
    {
        nod = Q.front();
        Q.pop();
        for (it = G[nod].begin(); it != G[nod].end(); ++it)
            if (Drum[*it] == -1)
            {
                Drum[*it] = Drum[nod] + 1;
                Q.push(*it);
            }
    }
}

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

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

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

    return 0;
}