Cod sursa(job #697928)

Utilizator mihaitza22Mihai Nan mihaitza22 Data 29 februarie 2012 11:39:49
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <stdio.h>
#include <vector>

#define Nmax 100001
#define pb push_back

using namespace std;

vector <int> v[Nmax];
int n, m, s, i, x, y, viz[Nmax], c[Nmax];

void bfs(int k)
{
    int p, u;
    viz[k]=0;
    p=u=1;
    c[p]=k;
    while (p<=u)
    {
        k=c[p++];
        for (vector <int>::iterator it = v[k].begin();it!=v[k].end();it++)
            if(viz[*it]==-1)
            {
                viz[*it] = viz[k] + 1;
                c[++u] = *it;
            }
    }

}

void citire()
{
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    scanf("%d %d %d", &n, &m, &s);
    for (i=1;i<=m;i++)
    {
        scanf("%d %d",&x, &y);
        v[x].pb(y);
    }
}

void afisare()
{
    for (i=1;i<=n;i++)
        printf("%d ", viz[i]);
}

int main()
{
    citire();
    for (i=1;i<=n;i++)
        viz[i]=-1;
    bfs(s);
    afisare();
    return 0;
}