Cod sursa(job #901503)

Utilizator theo.stoicanTheodor Stoican theo.stoican Data 1 martie 2013 10:29:17
Problema BFS - Parcurgere in latime Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.9 kb
#include<stdio.h>
int n,m,s,start[100002],l[2][1000002],viz[100002];
void bf(int vf)
{
    int i,pr=1,ul=1,coada[100002],v;
    for(i=1;i<=n;i++) viz[i]=-1;
    viz[vf]=0;
    coada[pr]=vf;
    while(pr<=ul)
    {
        v=coada[pr];
        for(i=start[v];i;i=l[1][i])
        {
            if(viz[l[0][i]]==-1 && l[0][i]!=0)
            {
            ++ul;
            coada[ul]=l[0][i];
            viz[l[0][i]]=viz[v]+1;
            }
        }
        ++pr;
    }
}
int main()
{
    int i,x,y,k=0;
    freopen("bfs.in","rt",stdin);
    freopen("bfs.out","wt",stdout);
    scanf("%d%d%d",&n,&m,&s);
    for(i=1;i<=m;i++)
    {
        scanf("%d%d",&x,&y);
        ++k;
        l[0][k]=y;
        l[1][k]=start[x];
        start[x]=k;
    }
    bf(s);
    for(i=1;i<=n;++i)
    {
        printf("%d ",viz[i]);
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}