Pagini recente » Cod sursa (job #2866097) | Cod sursa (job #3240834) | Cod sursa (job #806794) | Cod sursa (job #2121066) | Cod sursa (job #262861)
Cod sursa(job #262861)
#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