Pagini recente » Cod sursa (job #2636038) | Cod sursa (job #839175) | Cod sursa (job #2628258) | Cod sursa (job #42123) | Cod sursa (job #763884)
Cod sursa(job #763884)
#include <stdio.h>
#include <stdlib.h>
int queue[100001],dist[100001], n, m, start;
char used[100001];
struct graph
{
int edge;
struct graph *next;
} *G[100001];
int main()
{
int l, r, a, b;
struct graph *p;
FILE *in = fopen("bfs.in", "r");
FILE *out = fopen("bfs.out", "w");
fscanf(in, "%d %d %d", &n, &m, &start);
for(; m; m--)
{
fscanf(in, "%d %d", &a, &b);
p = malloc(sizeof(struct graph));
p->edge = b;
p->next = G[a];
G[a] = p;
}
l = r = 0;
queue[0] = start;
used[start] = 1;
while(l <= r)
{
for(p = G[ queue[l] ]; p; p = p->next)
if(used[p->edge] == 0)
queue[++r] = p->edge,
used[p->edge] = 1,
dist[p->edge] = dist[ queue[l] ] + 1;
l++;
}
for(a = 1; a <= n; a++)
if(used[a] == 1)
fprintf(out, "%d ", dist[a]);
else
fprintf(out, "-1 ");
fprintf(out, "\n");
fclose(in);
fclose(out);
return 0;
}