Cod sursa(job #296630)

Utilizator petrecgClinciu Glisca Petre petrecg Data 4 aprilie 2009 23:06:04
Problema BFS - Parcurgere in latime Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include <stdio.h>
long a[3][1000],st[1000],fin[1000],c[1000],l,q,i,s,n,m,x,y,v[1000];
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;
}