Pagini recente » Cod sursa (job #1212825) | Cod sursa (job #2503852) | Cod sursa (job #2875574) | Cod sursa (job #1606061) | Cod sursa (job #262831)
Cod sursa(job #262831)
#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