Cod sursa(job #1809447)

Utilizator demetriad-dagpagDavid Demetriad demetriad-dagpag Data 18 noiembrie 2016 22:41:48
Problema BFS - Parcurgere in latime Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.93 kb
#include <stdio.h>
#include <stdlib.h>
int nr,rez[100001],mark[100001],vf[1000001],next[1000001],coada[1000001],lista[100001];
void add(int x,int y)
{
    nr++;
    vf[nr]=y;
    next[nr]=lista[x];
    lista[x]=nr;
}
int main()
{
    int n,m,s,i,x,y,p,u;
    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);
        if(x!=y)
            add(x,y);
    }
    mark[s]=1;
    rez[s]=1;
    p=u=1;
    coada[1]=s;
    while(p<=u)
    {
        x=lista[coada[p]];
        while(x!=0)
        {
            if(mark[vf[x]]!=1)
            {
                u++;
                coada[u]=vf[x];
                mark[vf[x]]=1;
                rez[vf[x]]=rez[coada[p]]+1;
            }
            x=next[x];
        }
        p++;
    }
    for(i=1; i<=n; i++)
        printf("%d ",rez[i]-1);

    return 0;
}