Cod sursa(job #262831)

Utilizator alexeiIacob Radu alexei Data 19 februarie 2009 18:09:42
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include<stdio.h>
#define HUGE 1000002
#define NMAX 100002

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

void bfs()
{
int inc=1,sf=1;
int 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);
                                           

int N,M;
scanf("%d%d%d",&N,&M,&S);

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

for(i=1; i<=N; ++i)
{
	A[ i ]=new int( 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("%d ",DMIN[i]);

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