Cod sursa(job #250689)

Utilizator ciorile.chioareBogatu Adrian ciorile.chioare Data 31 ianuarie 2009 15:47:57
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include<stdio.h>
#define N 100000
#define M 1000000

int n,m,x0;
int *a[N],x[M],y[M],d[N];

void citire()
{
	int i,j;

	scanf("%d%d%d",&n,&m,&x0);
	
	for(i=1;i<=m;i++)
	{
		scanf("%d%d",&x[i],&y[i]);
		++d[x[i]];
	}
	for(i=1;i<=n;i++)
	{
		a[i]=new int[d[i]+1];
		a[i][0]=0;
	}
	for(i=1;i<=m;i++)
	{
		a[x[i]][++a[x[i]][0]]=y[i];
	}
}

void bfs(int vf)
{
	int q[N],p=0,u=0,x,y;
	int i;
	
	for(i=1;i<=n;i++)
		d[i]=-1;
	
	q[u++]=x0;
	d[x0]=0;
	while(p!=u)
	{
		x=q[p++];
		for(i=1;i<=a[x][0];i++)
		{
			y=a[x][i];
			if(d[y]==-1)
			{
				q[u++]=y;
				d[y]=1+d[x];				
			}
		}
	}
}


int main()
{	
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
	
	
	citire();
	bfs(x0);
	for(int i=1;i<=n;i++)
		printf("%d ",d[i]);
	
	
	return 0;
}