Cod sursa(job #1249730)

Utilizator bullseYeIacob Sergiu bullseYe Data 27 octombrie 2014 13:19:35
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include <fstream>
#define DMAX 100001
using namespace std;
ofstream fout ("bfs.out");

struct nod
        {int inf;
        struct nod *urm;
        };

typedef struct nod *Lista;
Lista A[DMAX];

int C[DMAX];
int n, m, vf_start;
int lg[DMAX], prec[DMAX];
void citire(); void BFS(); void inserare(Lista&, Lista, int);

int main()
{
    int i;
    citire();
    BFS ();
    for (i=1; i<=n; ++i)
        fout<<lg[i]-1<<" ";
    fout.close();
    return 0;
}

void citire()
{
    int i, x, y;
    ifstream fin ("bfs.in");
    fin>>n>>m>>vf_start;
    for (i=1; i<=m; ++i)
    {
        fin>>x>>y;
        inserare (A[x], NULL, y);
    }
    fin.close();
    return;
}

void BFS ()
{
    int prim, ultim, p;
    Lista q;
    C[1]=vf_start; lg[vf_start]=1;//l-am vizitat

    prim=ultim=1;
    while (prim<=ultim)
    {
        //extrag un element din coada
        p=C[prim++];
        //vizitez toti vecinii lui p
        for (q=A[p]; q; q=q->urm)
            if (!lg[q->inf])
            {
                lg[q->inf]=lg[p]+1;
                C[++ultim]=q->inf;
                prec[q->inf]=p;
            }
    }
    return;
}

void inserare (Lista &prim, Lista p, int x)
{
    Lista q;
    q=new nod;
    q->inf=x;
    if (p)
    {
        q->urm=p->urm;
        p->urm=q;
    }
    else
    {
        q->urm=prim;
        prim=q;
    }
    return;
}