Cod sursa(job #253589)

Utilizator socheoSorodoc Ionut socheo Data 5 februarie 2009 23:42:41
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include<stdio.h>
# define nmax 100001
#define  mmax 1000001
int n,m,nod,o,i,j,st,sf,s[nmax],li[2][mmax],c[nmax],viz[nmax],gr[nmax],q;

int main()
{freopen("bfs.in","r",stdin);
 freopen("bfs.out","w",stdout);
 scanf("%d%d%d",&n,&m,&nod);
int k=1;
 for(o=1;o<=m;o++)
{ scanf("%d%d",&i,&j);
  li[0][k]=j;
  li[1][k]=s[i];
  s[i]=k;
  k++;
}
c[1]=nod;
viz[nod]=1;
st=sf=1;
while(st<=sf)
{ q=s[c[st]];
  while(li[1][q]!=0)
  { if(viz[li[0][q]]==0)
     { c[++sf]=li[0][q];
       gr[li[0][q]]=gr[c[st]]+1;
	 }
	q=li[1][q];
  }
  if(viz[li[0][q]]==0)
     { c[++sf]=li[0][q];
       gr[li[0][q]]=gr[c[st]]+1;
	 }
	st++;
}	
  for(i=1;i<=n;i++)
	if(gr[i]==0&&i!=nod)
		printf("-1 ");
	else	printf("%d ",gr[i]);
	return 0;}