Cod sursa(job #801850)

Utilizator jupanubv92Popescu Marius jupanubv92 Data 25 octombrie 2012 01:47:08
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <cstdio>
#include <cstdlib>
#define NMax 1000001

int n,m,S;
int steps[NMax], qu[NMax];
FILE *input, *output;


struct node
{
    node *next;
    int info;
};

node *Graph[NMax];

void add(int x,int y)
{
    node *aux;
    aux = (node*)malloc(sizeof(node));
    aux -> next = Graph[x];
    aux -> info = y;
    Graph[x] = aux;
}

void read()
{
    fscanf(input,"%d %d %d ",&n,&m,&S);

    int x,y;
    for(int i=0;i<m;++i)
    {
        fscanf(input,"%d%d",&x,&y);
        add(x,y);
    }
   fclose(input);
}

void bfs()
{
    int st,dr;
    st = dr = 0;

    steps[S] = 1;
    qu[0] = S;


    while(st<=dr)
    {
        for (node *x = Graph[qu[st]]; x; x=x->next)
            if(!steps[x->info])
            {
                steps[x->info] = steps[qu[st]] + 1;
                qu[++dr] = x->info;
            }
        ++st;
    }


}

void print()
{
    for(int i=1;i<=n;++i)
        printf("%d ", steps[i]-1);
    printf("\n");
   fclose(output);
}

int main()
{
    input = freopen("bfs.in","r", stdin);
    output = freopen("bfs.out","w", stdout);

    read();
    bfs();
    print();

    return 0;
}