Cod sursa(job #2796523)

Utilizator danielcirlanDaniel Cirlan danielcirlan Data 8 noiembrie 2021 12:47:22
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.53 kb
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

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

class Graf{
    int numar_noduri;
    int numar_muchii;
    int start;
    vector<vector<int>> vecini;
public:
    Graf(){
        numar_muchii = 0;
        numar_noduri = 0;
        start = 0;
    };

    void citire_date_start();
    void bfs(int);
    int get_start();
};

int Graf::get_start(){
    return start;
}

void Graf::bfs(int start){
    vector<int> coada;
    vector<int> drum_min(numar_noduri+1,-1);
    vector<bool> vizitat(numar_noduri+1,false);
    drum_min[start] = 0;
    coada.push_back(start);
    vizitat[start] = true;

    int inc = 0, sf = 0;
    while(inc <= sf){
        for(int i = 0; i < vecini[coada[inc]].size(); i++)
            if(vizitat[vecini[coada[inc]][i]] == false){
                coada.push_back(vecini[coada[inc]][i]);
                sf++;
                drum_min[vecini[coada[inc]][i]] = drum_min[coada[inc]] + 1;
                vizitat[vecini[coada[inc]][i]] = true;
            }
        inc++;
    }

    for(int i = 1; i <= numar_noduri; i++)
        g<<drum_min[i]<<" ";
}

void Graf::citire_date_start(){
    f>>numar_noduri;
    f>>numar_muchii;
    f>>start;
    int n1,n2;
    vecini.resize(numar_noduri+1);
    for(int i = 0; i < numar_muchii; i++){
        f>>n1>>n2;
        vecini[n1].push_back(n2);
    }
}

int main()
{
    Graf a;
    a.citire_date_start();
    a.bfs(a.get_start());
    return 0;
}