Cod sursa(job #296631)

Utilizator petrecgClinciu Glisca Petre petrecg Data 4 aprilie 2009 23:07:02
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <stdio.h>
long a[3][1000001],st[100001],fin[100001],c[100001],l,q,i,s,n,m,x,y,v[100001];
int main()
{freopen("bfs.in","r",stdin);freopen("bfs.out","w",stdout);
 fscanf(stdin,"%ld%ld%ld",&n,&m,&s);
 for(i=1;i<=m;i++)
  {fscanf(stdin,"%ld%ld",&x,&y);
   if(fin[x]==0){st[x]=fin[x]=l+1;l++;a[1][l]=y;}
	  else{a[2][fin[x]]=l+1;fin[x]=l+1;l++;a[1][l]=y;}
  }
 v[s]=1;c[1]=s;q=1;l=1;
 while(q<n&&c[q])
  {x=st[c[q]];
   while(x)
    {if(v[a[1][x]]==0){l++;c[l]=a[1][x];v[a[1][x]]=v[c[q]]+1;}
     x=a[2][x];
    }
   q++;
  }
 for(i=1;i<=n;i++)if(v[i]==0)fprintf(stdout,"-1 ");else fprintf(stdout,"%ld ",v[i]-1);
 fclose(stdin);fclose(stdout);
 return 0;
}