Cod sursa(job #1198561)

Utilizator andi12Draghici Andrei andi12 Data 16 iunie 2014 10:31:02
Problema BFS - Parcurgere in latime Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <cstdio>
int v[100001];
int c[100001];
int lst[2000005];
int urm[2000005];
int vf[2000005];
int nr;
int n;
FILE *in,*out;
void ad(int x,int y)
{
    nr++;
    vf[nr]=y;
    urm[nr]=lst[x];
    lst[x]=nr;
}
void bfs(int x)
{
    int p=1,u=1,i,poz,a=0,cu;
    c[p]=x;
        for(i=p;i<=u;i++)
        {
            a++;
            poz=lst[c[i]];
            while(poz!=0)
            {
                if(v[vf[poz]]==0)
                {
                    u++;
                    c[u]=vf[poz];
                    v[vf[poz]]=a;
                }
                poz=urm[poz];
            }
        }
        p++;
}
int main()
{
    in=fopen("bfs.in","r");
    out=fopen("bfs.out","w");
    int m,i,x,y,s;
    fscanf(in,"%d%d%d",&n,&m,&s);
    nr=0;
    for(i=1;i<=m;i++)
    {
        fscanf(in,"%d%d",&x,&y);
        if(x!=y)
            ad(x,y);
    }
    bfs(s);
    for(i=1;i<=n;i++)
    {
        if(v[i]>=1 && i!=s)
            fprintf(out,"%d ",v[i]);
        if(i==s)
            fprintf(out,"0 ");
        if(v[i]==0 && i!=s)
            fprintf(out,"-1 ");

    }
    return 0;
}