Cod sursa(job #798109)

Utilizator Sm3USmeu Rares Sm3U Data 15 octombrie 2012 19:14:42
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <cstdio>
#include <vector>
#include <queue>

#define nMax 100100

using namespace std;

vector <int> graf[nMax];
int n;
int drum[nMax];
int viz[nMax];
queue <int> q;

void citire(){
    int m;
    int inceput;
    scanf ("%d", &n);
    scanf ("%d %d", &m, &inceput);
    while (m -- ){
        int x;
        int y;
        scanf ("%d", &x);
        scanf ("%d", &y);
        graf[x].push_back (y);
    }
    for (int i = 1; i <= n; ++ i){
        drum[i] = -1;
    }
    drum[inceput] = 0;
    viz[inceput] = 1;
    q.push (inceput);
}

void bfs(){
    while (!q.empty()){
        int nod = q.front();
        q.pop();

        for (unsigned int i = 0; i < graf[nod].size(); ++ i){
            if (viz[graf[nod][i]] == 0){
                viz[graf[nod][i]] = 1;
                drum[graf[nod][i]] = drum[nod] + 1;
                q.push (graf[nod][i]);
            }
        }
    }
}

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;
}