Pagini recente » Cod sursa (job #987881) | Cod sursa (job #1878483) | Cod sursa (job #2214528) | Cod sursa (job #1156722) | Cod sursa (job #754329)
Cod sursa(job #754329)
#include <stdio.h>
#include <string.h>
#define NMAX 100001
struct nod
{
int info;
nod *next;
};
nod *l[NMAX];
int n, m, s, viz[NMAX], q[NMAX];
void adaug(int x, int y)
{
nod *aux;
aux = new nod;
aux -> info = y;
aux -> next = l[x];
l[x] = aux;
}
void bfs()
{
int i, st, dr;
nod *p;
memset(viz, -1, sizeof(viz));
viz[s] = 0;
q[0] = s;
st = dr = 0;
while ( st <= dr)
{
for ( p = l[q[st]]; p; p = p -> next)
if ( viz[p -> info] == -1)
{
q[++dr] = p -> info;
viz[ p-> info] = viz[q[st]] + 1;
}
st++;
}
}
int main()
{
int i, x, y;
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
scanf("%d %d %d", &n, &m, &s);
for (i = 1; i <= m; i++)
{
scanf("%d %d", &x, &y);
if ( x != y)
adaug(x, y);
}
bfs();
for ( i = 1; i <= n; i++)
printf("%d ", viz[i]);
printf("\n");
fclose(stdin);
fclose(stdout);
return 0;
}