Pagini recente » Cod sursa (job #466732) | Cod sursa (job #2263009) | Cod sursa (job #2685060) | Cod sursa (job #2786618) | Cod sursa (job #1720440)
#include<stdio.h>
#include<stdlib.h>
struct Node
{
int data;
struct Node *next;
}*A[100010];
int viz[100010],D[100010];
int queue[100010],q_st,q_f;
typedef struct Node Node;
Node *stk;
void push_list(Node **v, int data)
{
Node *p = (Node*)malloc(sizeof(Node));
p->data = data;
p->next = *v;
*v = p;
}
void bfs(int x)
{
queue[++q_f] = x;
++q_st;
viz[x] = 1;
while (q_st <= q_f)
{
int e = queue[q_st++];
Node *p = A[e];
while (p)
{
if (!viz[p->data])
{
D[p->data] = D[e] + 1;
viz[p->data] = 1;
queue[++q_f] = p->data;
}
p = p->next;
}
}
}
FILE *in, *out;
int main()
{
int N, M,S, x, y, i;
in = fopen("bfs.in", "r");
out = fopen("bfs.out", "w");
fscanf(in, "%d%d%d", &N, &M, &S);
for (i = 1;i <= M;++i)
{
fscanf(in, "%d%d", &x, &y);
push_list(&A[x], y);
}
bfs(S);
for (int i = 1;i <= N;++i)
if (D[i] == 0 && i != S)
fprintf(out, "-1 ");
else
fprintf(out, "%d ", D[i]);
return 0;
}