Pagini recente » Cod sursa (job #2712398) | Cod sursa (job #669399) | Cod sursa (job #2780591) | Cod sursa (job #2558761) | Cod sursa (job #763878)
Cod sursa(job #763878)
#include <stdio.h>
#include <stdlib.h>
int queue[100001],dist[100001], n, m, start;
struct bit
{
unsigned u : 1;
} 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].u = 1;
while(l <= r)
{
for(p = G[ queue[l] ]; p; p = p->next)
if(used[p->edge].u == 0)
queue[++r] = p->edge,
used[p->edge].u = 1,
dist[p->edge] = dist[ queue[l] ] + 1;
l++;
}
for(a = 1; a <= n; a++)
if(used[a].u == 1)
fprintf(out, "%d ", dist[a]);
else
fprintf(out, "-1 ");
fprintf(out, "\n");
fclose(in);
fclose(out);
return 0;
}