Cod sursa(job #804809)

Utilizator cremarencodianaCremarenco Diana cremarencodiana Data 30 octombrie 2012 15:12:21
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
# include <stdio.h>
# include <string.h>

using namespace std;
struct point {int inf; point *leg;}; 
point *p1, *ultim, *l[100010];
int n,x,y,s,q[100010],nod,i,p,u,drum[100010],m;
bool viz[100010];

void bfs()
{ 
	while (p<=u) 
	{
		nod=q[p];
		while (l[nod])
		if (viz[l[nod]->inf]==false)
		{
			u++;
			q[u]=l[nod]->inf;
			viz[l[nod]->inf]=true;
			drum[l[nod]->inf]=drum[nod]+1;
			l[nod]=l[nod]->leg;
		}
		else l[nod]=l[nod]->leg;
		p++;
	}
	
}

int main()
{
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
	memset(l,NULL,sizeof(l));
	scanf("%d %d %d\n",&n,&m,&s);
	for (i=1; i<=m; i++)
	{
		p1 = new point;
		scanf("%d %d\n",&x,&y);
		p1->inf=y;
		p1->leg=l[x];
		l[x]=p1;
	}
	p=u=1;
	q[p]=s;
	viz[s]=true;
	memset(drum,-1,sizeof(drum));
	drum[s]=0;
	bfs();
	for (i=1; i<=n; i++)
		printf("%d ",drum[i]);
	printf("\n");
	return 0;
}