Cod sursa(job #239740)

Utilizator Matei14Popa-Matei Mihai Matei14 Data 5 ianuarie 2009 18:08:13
Problema BFS - Parcurgere in latime Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include<stdio.h>
#define N 100005
#define M 1000005
int n,m,s;
int* a[N],d[N];
int dist[M];

void citire()
{
	int x[N],y[N],i;
	scanf("%d%d%d",&n,&m,&s);
	for(i=1;i<=m;++i)//citesc pt a calcula gradele
	{
		scanf("%d%d",&x[i],&y[i]);
		++d[x[i]];
	}
	for(i=1;i<=n;++i)//alocarea dinamica
	{
		a[i]=new int[d[i]+1];
		a[i][0]=0;
	}
	fclose(stdin);
	for(i=1;i<=m;++i)
		a[x[i]][++a[x[i]][0]]=y[i];//il adaug pe y in lista vecinilor lui x
}

void proba()
{
	int i,j;
	for(i=1;i<=n;++i)
	{
		printf("%d: ",i);
		for(j=1;j<=a[i][0];++j)
			printf("%d ",a[i][j]);
		printf("\n");
        }
}

void bfs(){
	int p=0,u=0,caut[N],coada[N];
	int x,y,i;
	coada[u++]=s;//adaug
	dist[s]=1;
	while(p<u)
	{
		x=coada[p++];//scot
		for(i=1;i<=a[x][0];++i)
		{
			y=a[x][i];
			if(!dist[y])
			{
				coada[u++]=y;
				dist[y]=dist[x]+1;
			}
		}
	}
}

void afisare(){
	int i;
	for(i=1;i<=n;++i)
		printf("%d ",dist[i]-1);
}

int main()
{
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
	citire();
	bfs();
	afisare();
	fclose(stdin);
	fclose(stdout);
	return 0;
}