Cod sursa(job #714454)

Utilizator Sm3USmeu Rares Sm3U Data 15 martie 2012 19:19:53
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <cstdio>
#include <vector>
#define nMax 100001
#include <queue>

using namespace std;

int n;
vector <int> graf[nMax];
queue <int> coada;
int a[nMax];
int nod;

void citire()
{
    int m;
    scanf ("%d %d %d", &n, &m, &nod);
    while (m --){
        int x;
        int y;
        scanf ("%d %d", &x, &y);
        graf[x].push_back (y);
    }
}

void bfs()
{
    coada.push (nod);
    a[nod] = 1;
    while (!coada.empty ()){
        int x = coada.front();
        coada.pop();
        for (unsigned int i = 0; i < graf[x].size(); ++ i){
            if (a[graf[x][i]] == 0){
                a[graf[x][i]] = a[x] + 1;
                coada.push (graf[x][i]);
            }
        }
    }
}

void afis()
{
    for (int i = 1; i <= n; ++ i){
        if (a[i]){
            printf ("%d ", a[i] - 1);
        }else{
            printf ("-1 ");
        }
    }
}

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


    return 0;
}