Cod sursa(job #246764)

Utilizator vlad_popaVlad Popa vlad_popa Data 21 ianuarie 2009 12:04:06
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <cstdio> 
#include <vector>

using namespace std;

#define MAXN 100005
#define pb push_back

int N, M, S;
vector <int> lv[MAXN];
int d[MAXN], cd[MAXN];

void read () {
    int a, b;
    for (scanf ("%d %d %d", &N, &M, &S); M; -- M) {
        scanf ("%d %d", &a, &b);
        lv[a].pb(b);
    }
}

void BFS (int nod) {
    memset (d, -1, sizeof (d));
    d[nod] = 0;
    
    int ended;
    cd[ended = 0] = nod;
    
    for (int pas = 0; pas <= ended; ++ pas) {
        int n = cd[pas], sz = lv[n].size();
        
        for (int i = 0; i < sz; ++ i)
            if (d[lv[n][i]] == -1) {
                d[lv[n][i]] = d[n] + 1;
                cd[++ended] = lv[n][i];
            }
    }
}

void solve () {
    BFS (S);
    
    for (int i = 1; i <= N; ++ i) printf ("%d ", d[i]);
    printf ("\n");
}

int main () {
    freopen ("bfs.in", "r", stdin);
    freopen ("bfs.out", "w", stdout);
    
    read ();
    solve ();
    
    return 0;
}