Cod sursa(job #681095)

Utilizator flaviusc11Fl. C. flaviusc11 Data 16 februarie 2012 15:38:23
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<cstdio>
#define NMAX 100000
#define MMAX 2000000
using namespace std;
int n,m,s,V[NMAX],T[2][MMAX],start[NMAX];

void citire()
{
    freopen("bfs.in","r",stdin);
    int i,x,y;
    scanf("%d%d%d", &n,&m,&s);
    for(i=1;i<=m;++i)
    {
        scanf("%d%d",&x,&y);
        T[0][i]=y;
        T[1][i]=start[x];
        start[x]=i;
    }

}
void bfs(int s)
{
    int ic,sf,man, coada[NMAX];
    ic=sf=1;
    coada[ic]=s;
    //V[s]=k;
    while(ic<=sf)
    {
        man=start[coada[ic]];
        while(man)
        {
            if(V[T[0][man]]==0)
             {
                 sf++;
                 coada[sf]=T[0][man];
                 V[T[0][man]]=V[coada[ic]]+1;
             }
             man=T[1][man];
        }
        ic++;
    }
    V[s]=0;
}
void afisare()
{
    freopen("bfs.out","w",stdout);
    int i;
    for(i=1;i<=n;++i)
      printf("%d ", !V[i] && i!=s ? -1 : V[i] );
}
int main()
{
    citire();
    bfs(s);
    afisare();
    return 0;
}