Pagini recente » Cod sursa (job #2604951) | Cod sursa (job #1351188) | Cod sursa (job #2798499) | Cod sursa (job #1840062) | Cod sursa (job #325109)
Cod sursa(job #325109)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define in "bfs.in"
#define out "bfs.out"
#define NMAX 100005
#define ALB 0
#define GRI 1
#define NEGRU 2
#define INF (1<<30)
typedef struct nod {
int vf;
struct nod *next;
} *PNOD, NOD;
PNOD L[NMAX];
int N, M, S, p,u, d[NMAX], sel[NMAX];
int q[NMAX];
void Add ( int i, int j )
{
PNOD p = (PNOD)calloc ( 1, sizeof(NOD) );
p->vf = j;
p->next = L[i];
L[i] = p;
}
void BFS()
{
int i; PNOD j;
for ( i = 1; i <= N; ++i ) d[ i ] = -1;
q[ p = u = 1 ] = S;
d[ S ] = 0; sel [ S ] = GRI;
while ( p <= u )
{
i = q[p];
for ( j = L[i]; j; j = j->next )
if ( sel[j->vf] == ALB )
{
d[ j->vf ] = d[i] + 1;
sel[ j ->vf ] = GRI;
q[ ++u ] = j->vf;
}
p++;
sel[i] = NEGRU;
}
}
int main ( void )
{
freopen ( in, "r", stdin );
freopen ( out, "w", stdout );
scanf ( "%d%d%d", &N, &M, &S );
int i, j;
for ( ; M > 0; --M ) {
scanf ( "%d%d", &i, &j );
Add ( i, j );
}
BFS ( S );
for ( i = 1; i <= N; ++i )
printf ( "%d ", d[i] );
return 0;
}