Cod sursa(job #2787295)

Utilizator gabrielanideleaNidelea Gabriela-Andreea gabrielanidelea Data 22 octombrie 2021 22:05:30
Problema Parcurgere DFS - componente conexe Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.83 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

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

const int maxim = 100001;
int distante[maxim];
bool vizitate[maxim];

class Graf{
    int noduri, muchii;
    //lista de adiacenta
    vector<int> listaAdiacenta[maxim];
public:
    void construieste(int start, int final);
    Graf(int noduri, int muchii);
    void bfs(int nodStart);
};

void Graf::construieste(int start, int final) {
    listaAdiacenta[start].push_back(final);
}

Graf::Graf(int noduri, int muchii) : noduri(noduri), muchii(muchii) {}

void Graf::bfs(int nodStart) {
    queue<int> queueBfs;
    queueBfs.push(nodStart);
    vizitate[nodStart] = true;
    distante[nodStart] = 0;

    while(!queueBfs.empty())
    {
        int nodCurent = queueBfs.front();
        for(int i=0; i<listaAdiacenta[nodCurent].size(); i++)
        {
            if(!vizitate[listaAdiacenta[nodCurent][i]])
            {
                vizitate[listaAdiacenta[nodCurent][i]] = true;
                queueBfs.push(listaAdiacenta[nodCurent][i]);
                distante[listaAdiacenta[nodCurent][i]] = 1 + distante[nodCurent];
            }
        }
        queueBfs.pop();
    }
}

void afisareDistante(int nrNoduri){
    for(int i=1; i<=nrNoduri; i++)
        out<<distante[i]<<" ";
}

int main() {
    int noduri, muchii, x, y, nodStart;

    std::fill(std::begin(distante), std::begin(distante)+maxim, -1);
    std::fill(std::begin(vizitate), std::begin(vizitate)+maxim, false);

    in>>noduri>>muchii>>nodStart;
    Graf mygraf(noduri, muchii);

    for(int i=0; i<muchii; i++)
    {
        //muchie de la x la y
        in>>x>>y;
        mygraf.construieste(x, y);
    }

    mygraf.bfs(nodStart);

    afisareDistante(noduri);

    return 0;
}