Cod sursa(job #763884)

Utilizator igsifvevc avb igsi Data 3 iulie 2012 14:14:19
Problema BFS - Parcurgere in latime Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.02 kb
#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;
}