Cod sursa(job #228240)

Utilizator filipbFilip Cristian Buruiana filipb Data 6 decembrie 2008 19:42:56
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <stdio.h>
#include <vector>

using namespace std;

#define NMax 100005

int N, M, S, d[NMax], q[NMax];
vector<int> G[NMax];

void BF(int sursa)
{
    int i, qr, ql, sz, x;
     
    for (i = 1; i <= N; i++)
        d[i] = -1;

     d[sursa] = 0;
     for (q[qr=ql=0] = sursa; qr <= ql; ++qr)
         for (sz = G[q[qr]].size(), i = 0; i < sz; ++i)
             if (d[x = G[q[qr]][i]] == -1)
                q[++ql] = x,
                d[x] = d[q[qr]] + 1;
}

int main()
{
    int i, j;
    
    freopen("bfs.in", "r", stdin);
    freopen("bfs.out", "w", stdout);
    
    scanf("%d %d %d", &N, &M, &S);        
    for (; M; --M)
    {
        scanf("%d %d", &i, &j);
        G[i].push_back(j);
    }
    
    BF(S);
    
    for (i = 1; i <= N; ++i)
        printf("%d ", d[i]);
    printf("\n");
    
    return 0;
}