Cod sursa(job #2813332)

Utilizator MirunaStefaniaLupascu Miruna-Stefania MirunaStefania Data 6 decembrie 2021 12:49:25
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;


ifstream fin ("bfs.in");
ofstream fout ("bfs.out");
///CLASA MARIA DUTU
class graf{
private:
    int nrNoduri, nrMuchii, start;
    vector<vector<int>> listaAd;
    vector<int> distante;
    void bfs();

public:
    graf(int nrNoduri, int nrMuchii, int start) : nrNoduri(nrNoduri), nrMuchii(nrMuchii) , start(start){
    listaAd.resize(nrNoduri + 1);
    distante.resize(nrNoduri + 1, -1);
    };
    void adaugareInListaAd(const int &nod1, const int &nod2);
    void afisare();
};

void graf:: adaugareInListaAd(const int &nod1, const int &nod2) {
    listaAd[nod1].push_back(nod2);
}

void graf::bfs() {
    queue<int> coada;
    coada.push(start);
    distante[start] = 0;
    while(!coada.empty()){
        int nod = coada.front();
        for(int i = 0;  i < listaAd[nod].size(); i ++){
            if(distante[listaAd[nod][i]] == -1){
                coada.push(listaAd[nod][i]);
                distante[listaAd[nod][i]] = distante[nod] + 1;
            }
        }
        coada.pop();
    }
}

void graf::afisare() {
    bfs();
    for(int i = 1; i <= nrNoduri; i ++){
        fout<<distante[i]<<" ";
    }
}


int main() {
    int n, m, s;
    fin >> n >> m >> s;
    graf G(n, m, s);
    for(int i = 0; i < m; i ++){
        int n1, n2;
        fin >> n1 >> n2;
        G. adaugareInListaAd(n1, n2);
    }
    G.afisare();

    return 0;
}