Cod sursa(job #2167936)

Utilizator matei.goantaGoanta Matei Cosmin matei.goanta Data 14 martie 2018 07:01:29
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>
#define NMAX 100005

using namespace std;

ifstream fin("bfs.in");
ofstream fout("bfs.out");

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

typedef struct nod*  LSI;
LSI lista[NMAX];

bool uz[NMAX];

int n, m, start, i, drum[NMAX];

void citire();
void dfs(int);
void bfs(int);
void inserare(LSI& lista, int x);




int main()
{
    citire();

    bfs(start);
    for(i=1; i<=n; i++)
        if(drum[i]==0 && i!=start)
            fout<<-1<<' ';
            else
            fout<<drum[i]<<' ';

    return 0;
}

void citire()
{
    int x, y, i;

    fin>>n>>m>>start;

    for(i=1; i<=m; i++)
        {
        fin>>x>>y;
        inserare(lista[x], y);
        }
}

void bfs(int start)
{
    int C[NMAX], x, prim, ultim;

    LSI cont = new nod;

    C[0]=start;
    prim=ultim=0;
    uz[start]=1;

    while(prim<=ultim)
        {
        x=C[prim++];
        for(cont=lista[x]; cont; cont=cont->urm)
            if(!uz[cont->x])
                {
                uz[cont->x]=1;
                C[++ultim]=cont->x;
                drum[cont->x]=drum[x]+1;
                }
        }
}

void inserare(LSI &lista, int x)
    {LSI p=new nod;

    p->x=x;
    p->urm=lista;
    lista=p;

    }