Cod sursa(job #1249726)

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

int C[DMAX];
int n, m, vf_start;
int A[DMAX][DMAX];
int lg[DMAX], prec[DMAX];
void citire(), BFS();
void drum (int a, int b);

int main()
{
    int i;
    citire();
    BFS ();
    for (i=1; i<=n; ++i)
        drum (vf_start, i);
    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;
        A[x][++A[x][0]]=y;
    }
    fin.close();
    return;
}

void BFS ()
{
    int prim, ultim, p, i;
    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 (i=1; i<=A[p][0]; ++i)
            if (!lg[A[p][i]])
            {
                lg[A[p][i]]=lg[p]+1;
                C[++ultim]=A[p][i];
                prec[A[p][i]]=p;
            }
    }
    return;
}

void drum (int a, int b)//afiseaza lantul/drumul minim de la a la b
{
    fout<<lg[b]-1<<" ";
}