Cod sursa(job #401989)

Utilizator BooZZySandu Bogdan BooZZy Data 23 februarie 2010 11:55:20
Problema BFS - Parcurgere in latime Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include<stdio.h>
int n,m,s,c[200010],viz[100010],i,k,val,x,y;
struct nod
{
	int inf;
	nod *adr;
};
nod *l[100005],*p,*cn,*u;
int main()
{
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
	scanf("%d %d %d",&n,&m,&s);
	for(i=0;i<m;i++)
	{
		scanf("%d %d",&x,&y);
		cn=new nod;
		cn->inf=y;
		cn->adr=l[x];
		l[x]=cn;
	}
	for(i=0;i<=n;i++)
		viz[i]=-1;
	k=1;
	c[k]=s;
	viz[s]=0;
	c[++k]=-3;
	val=1;
	for(i=1;i<=k;i++)
	{
		if(c[i]==-3)val++;
		else
		{
			u=l[c[i]];
			while(u)
			{
				if(viz[u->inf]==-1)
				{
					viz[u->inf]=val;
					c[++k]=u->inf;
				}
				u=u->adr;
			}
			c[++k]=-3;
		}
	}
	for(i=1;i<=n;i++)
		printf("%d ",viz[i]);
	return 0;
}