Cod sursa(job #245293)

Utilizator Alexa_ioana_14Antoche Ioana Alexandra Alexa_ioana_14 Data 17 ianuarie 2009 16:14:57
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<stdio.h>
#define N 100005
#define M 1000005
int *a[N];
int d[N],x[M],y[M],n,m,viz[M],x0;
void citire()
{
	scanf("%d%d%d",&n,&m,&x0);
	for (int i=1; i<=m; ++i)
	{
		scanf("%d%d",&x[i],&y[i]);
		++d[x[i]];
		//++d[y[i]];
	}
	for (int i=1; i<=n; ++i)
	{
		a[i]=new int [1+d[i]];
		a[i][0]=0;
	}
	for (int i=1; i<=m; ++i)
	{
		a[x[i]][++a[x[i]][0]]=y[i];
		//a[y[i]][++a[y[i]][0]]=x[i];
	}
}
void bfs(int x0)
{
	int p=0,u=0,coada[N],x,y;
	for(int i=1;i<=n;++i)
		d[i]=-1;
	coada[u++]=x0;
	viz[x0]=1;
	d[x0]=0;
	while (p!=u)
	{
		x=coada[p++];
		for (int i=1; i<=a[x][0]; ++i)
		{
			y=a[x][i];
			if (!viz[y])
			{
				coada[u++]=y;
				viz[y]=1;
				d[y]=1+d[x];
			}
		}
	}
	for (int i=1; i<=n;++i)
		printf("%d ",d[i]);
}
/*void afis()
{
	for (int i=1; i<=n;++i)
		printf("%d",coada[i]);
}*/
int main()
{
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
	citire();
	bfs(x0);
	//afis();
	return 0;
}