Cod sursa(job #530196)

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

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

struct vector
{
	int nod,level;
}stack[100002];

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

inline void bf(int nod,int level)
{
	sol[nod]=level;
	use[nod]=1;

	tree *p=Graf[nod];

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

	if(++ind<=size) bf(stack[ind].nod,stack[ind].level);
}

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));
	
	size=0;
	ind=0;
	bf(S,0);

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

	return 0;
}