Cod sursa(job #2782453)

Utilizator davidbejenariu2David Bejenariu davidbejenariu2 Data 12 octombrie 2021 14:01:30
Problema BFS - Parcurgere in latime Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.49 kb
#include <fstream>
#include <vector>
#include <queue>
#include <cstring>

using namespace std;

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

class Graf {
public:
    void DFS(int nod, vector<bool> &viz) {
        viz[nod] = true;

        for (auto &x : m_ad[nod]) {
            if (!viz[x]) {
                DFS(x, viz);
            }
        }
    }

    int CompConexe() {
        int nrComp = 0;
        vector<bool> viz(m_n, false);

        for (int i = 1; i <= m_n; ++i) {
            if (!viz[i]) {
                ++nrComp;
                DFS(i, viz);
            }
        }

        return nrComp;
    }

    void minDist(int start) {
        vector<int> dist(m_n + 1, -1);
        queue<int> Q;
        int x;

        dist[start] = 0;
        Q.push(start);

        while (!Q.empty()) {
            x = Q.front(); Q.pop();

            for (auto &y : m_ad[x]) {
                if (dist[y] == -1) {
                    dist[y] = dist[x] + 1;
                    Q.push(y);
                }
            }
        }

        for (int i = 1; i <= m_n; ++i) {
            fout << dist[i] << ' ';
        }
    }

    Graf(int n, vector<vector<int>> &ad) : m_n(n), m_ad(ad) {}

private:
    int m_n;
    vector<vector<int>> m_ad;
};

int main() {
    int n, m, s, x, y;

    fin >> n >> m >> s;

    vector<vector<int>> ad(n + 1);

    for (int i = 1; i <= m; ++i) {
        fin >> x >> y;

        ad[x].push_back(y);
//        ad[y].push_back(x);
    }

    Graf G(n, ad);
    G.minDist(s);

    return 0;
}