Cod sursa(job #2786934)

Utilizator gabrielanideleaNidelea Gabriela-Andreea gabrielanidelea Data 21 octombrie 2021 23:55:15
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.59 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> nod;
        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())
        {
            nod = coada.front();
            minime[nod.first] = nod.second;
            coada.pop();
            for(auto i : stocare[nod.first]) // parcurgem primele elem din pereche
                if(!vizitat[i]){
                    coada.push({i, nod.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 = 0; 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 = 0; i<N; i++)
        g<< Gr.minime[i]<<" ";
    return 0;

}