Cod sursa(job #2786938)

Utilizator gabrielanideleaNidelea Gabriela-Andreea gabrielanidelea Data 22 octombrie 2021 00:21:52
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.61 kb
#include<iostream>
#include<fstream>
#include<queue>
#include<vector>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
class graf{
public:
    int N, M, S, vizitat[100010], minime[100010];
    vector<int> stocare[100010];
    queue<pair<int, int>> coada;
    graf(){}
    void bfs(int start)
    {
        pair<int, int> curent;
        coada.push({start, 0}); // dist de la start la el insusi e 0
        minime[start] = 0; // momentan, minime va avea val 0
        vizitat[start] = 1; // vizitez nodul curent
        while(!coada.empty())
        {
            curent = coada.front();
            minime[curent.first] = curent.second;
            coada.pop();
            for(auto i : stocare[curent.first]) // parcurgem primele elem din pereche
                if(!vizitat[i]){
                    coada.push({i, curent.second+1}); //cresc contorul
                    vizitat[i] = 1; // vizitez nodul i
                }
        }

    }
    void creare_graf(int N, int M, int S)
    {
        this-> N = N;
        this-> M = M;
        this-> S = S;
        for(int i = 0; i< 100010; i++)
                minime[i] = -1; //umplem tabl de dist minime cu -1
    }
    void creare_adiacente(int M)
    {
        int nod1, nod2;
        for(int i = 1; i<= M; i++)
        {
            f>>nod1>>nod2;
            stocare[nod1].push_back(nod2);
        }

    }
};
graf Gr;
int main()
{
    int N, M, S;
    f>>N>>M>>S;
    Gr.creare_graf(N, M, S);
    Gr.creare_adiacente(M);
    Gr.bfs(S);
    for(int i = 1; i<=N; i++)
        g<< Gr.minime[i]<<" ";
    return 0;

}