Cod sursa(job #2689662)

Utilizator XeinIonel-Alexandru Culea Xein Data 21 decembrie 2020 19:37:18
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>

#define NMAX 100001

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

Adiacenta *Lista[NMAX];
int NrArce[NMAX];

int main()
{
    std::ifstream f("bfs.in");
    std::ofstream g("bfs.out");
    int N, M, S, Q[NMAX], p = 1, u = 1, NrActualArce;

    f >> N >> M >> S;
    for(int i = 1; i <= M; i++)
    {
        int a, b;
        f >> a >> b;
        Adiacenta *aux = new Adiacenta;
        aux->nod = b;
        aux->urm = Lista[a];
        Lista[a] = aux;
    }
    f.close();

    Q[1] = S;
    NrArce[S] = 1;
    while(p <= u)
    {
        int NodActual = Q[p];
        NrActualArce = NrArce[NodActual] + 1;
        Adiacenta *vecin = Lista[NodActual];
        while(vecin != NULL)
        {
            if(!NrArce[vecin->nod])
            {
                NrArce[vecin->nod] = NrActualArce;
                Q[++u] = vecin->nod;
            }
            vecin = vecin->urm;
        }
        p++;
    }

    for(int i = 1; i <= N; i++)
        if(NrArce[i] != 0 || i == S)
            g << NrArce[i] - 1 << ' ';
        else
            g << -1 << ' ';
    return 0;
}