Cod sursa(job #530197)

Utilizator blastoiseZ.Z.Daniel blastoise Data 7 februarie 2011 10:26:00
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <stdio.h>
#include <string.h>

int i,x,y,N,M,S,sol[100002],use[100002],ind,size,stack[100002];

struct tree
{
	int nod;
	tree *link;
}*Graf[100002];

inline void bf(int nod)
{
	tree *p=Graf[nod];

	while(p)
	{
		if(!use[p->nod])
		{
			use[p->nod]=1;
			stack[++size]=p->nod;
			sol[p->nod]=sol[nod]+1;
		}
		p=p->link;
	}

	ind++;
	if(ind<=size) bf(stack[ind]);
}

inline void add(int x,int y)
{
	tree *p;

	p=new tree;
	p->nod=y;
	p->link=Graf[x];
	Graf[x]=p;
}

int main()
{
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);

	scanf("%d%d%d",&N,&M,&S);
	
	for(i=1;i<=M;i++)
	{
		scanf("%d%d",&x,&y);
		add(x,y);
	}

	memset(sol,-1,sizeof(sol));
	memset(stack,0,sizeof(stack));
	memset(use,0,sizeof(use));

	use[S]=1;
	sol[S]=0;
	size=0;
	ind=0;
	bf(S);

	for(i=1;i<N;i++)
		printf("%d ",sol[i]);
	printf("%d\n",sol[N]);

	return 0;
}