Cod sursa(job #262861)

Utilizator alexeiIacob Radu alexei Data 19 februarie 2009 18:30:33
Problema BFS - Parcurgere in latime Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include<stdio.h>
#define HUGE 100000
#define NMAX 100002

long M1[HUGE],M2[HUGE];
long S;
long G[NMAX],DMIN[NMAX];
int viz[NMAX];
long *A[NMAX];

void bfs()
{
long C[NMAX];
long inc=1,sf=1;
long nod,a1,i,a2,c;
                                                
C[1]=S;viz[S]=1;

while( inc<=sf )
{
	nod=C[inc++];
	a1=A[nod][0];
	c=DMIN[nod];

	for(i=1; i<=a1; ++i)
	{
		a2=A[nod][i];
		if( !viz[ a2 ] )
		{
			viz[a2]=1;
			C[++sf]=a2;
			DMIN[ a2 ]=c+1;	
                }
	}
}

}


int main()
{

freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);


long N,M;
scanf("%ld%ld%ld",&N,&M,&S);

long i,a1,a2;
for(i=1; i<=M; ++i)
{
	scanf("%ld%ld",&M1[i],&M2[i]);
	++G[ M1[i] ];
}

for(i=1; i<=N; ++i)
{
	A[i]=new long[ G[i]+1 ];
	A[i][0]=0;
}              

for(i=1; i<=M; ++i)
{
	a1=M1[i];a2=M2[i];

	if( a1!=a2 )
		A[ a1 ][ ++A[a1][0] ]=a2;
}

bfs();

for(i=1; i<=N; ++i)
if( !DMIN[i] && i!=S )
	printf("%d ",-1);
else
printf("%ld ",DMIN[i]);

printf("\n");
return 0;
}
//Borland is a problem in itself