Cod sursa(job #2789403)

Utilizator Dantelogus99Gruia Gabriel Dantelogus99 Data 27 octombrie 2021 15:09:18
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.03 kb
#include <iostream>
#include <fstream>
#include <unordered_map>
#include <vector>
#include <queue>
#include <list>
using namespace std;

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

class Graf
{
    int nrNoduri;
    int nrMuchii;
    bool orientat;

    vector<vector<int>> listaAdiacenta;

public:
    Graf(bool o)
    {
        nrNoduri = 0;
        nrMuchii = 0;
        orientat = o;
    }

    Graf(int n, int m, bool o)
    {
        nrNoduri = n;
        nrMuchii = m;
        orientat = o;
    }

    void citireGraf()
    {
        int x, y;
        if(orientat)
            for (int i = 0; i < nrMuchii; i++)
            {
                fin >> x >> y;
                listaAdiacenta[x].push_back(y);
            }
        else
            for (int i = 0; i < nrMuchii; i++)
            {
                fin >> x >> y;
                listaAdiacenta[x].push_back(y);
                listaAdiacenta[y].push_back(x);
            }
    }

    void distanteBFS(int nodS)
    {
        vector<bool> vizitat(nrNoduri + 1, false);
        vector<int> distanta(nrNoduri + 1, -1);

        BFS(nodS, vizitat, distanta);

        for (int i = 1; i <= nrNoduri; i++)
            fout << distanta[i] << " ";
    }

private:
    void BFS(int nodS, vector<bool>& vizitat, vector<int>& distanta)
    {
        queue<int> queue;
        queue.push(nodS);

        vizitat[nodS] = true;
        distanta[nodS] = 0;

        while (!queue.empty())
        {
            int nodCurent = queue.front();
            //fout << nodCurent << " ";
            queue.pop();

            for (int vecin : listaAdiacenta[nodCurent])
                if (!vizitat[vecin])
                {
                    queue.push(vecin);
                    vizitat[vecin] = true;
                    distanta[vecin] = distanta[nodCurent] + 1;
                }
        }
    }
};

int main()
{
    int n, m, s;
    fin >> n >> m >> s;

    Graf G(n, m, true);
    G.citireGraf();

    G.distanteBFS(s);
}