Cod sursa(job #1354336)

Utilizator cosminionutCosmin Ionut cosminionut Data 21 februarie 2015 19:25:22
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#include <cstring>
using namespace std;

ofstream g("bfs.out");

int N, M, S, x, y, dist[100001], coada[100001], prim, ultim;
struct nod
{
    int info;
    nod *urm;
} *p, *li[100001];

bool viz[100001];

void push(nod *&li, int informatie)
{
    p=new nod();
    p->info=informatie;
    p->urm=li;
    li=p;
}

void BFS()
{
    memset(dist, -1, sizeof(dist));
    dist[S]=0;

    coada[1]=S;
    viz[S]=true;

    ultim=1;
    for(prim=1; prim<=ultim; prim++)
    {
        S=coada[prim];
        for(p=li[S]; p; p=p->urm)
            if(!viz[p->info])
            {
                viz[p->info]=true;
                dist[p->info]=dist[S]+1;
                ultim++;
                coada[ultim]=p->info;
            }
    }
}

int main()
{
    int i;
    FILE *f;
    f=fopen("bfs.in","r");
    fscanf(f, "%d%d%d", &N, &M, &S);
    for(i=1; i<=M; i++)
    {
        fscanf(f, "%d%d", &x, &y);
        push(li[x], y);
    }
    BFS();
    for(i=1; i<=N; i++)
        g<<dist[i]<<" ";
    return 0;
}