Cod sursa(job #2795698)

Utilizator davidbejenariu2David Bejenariu davidbejenariu2 Data 6 noiembrie 2021 19:59:53
Problema BFS - Parcurgere in latime Scor 0
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("dfs.in");
ofstream fout("dfs.out");

class Graph {
public:
    void DFS(int v, vector<bool> &vis) {
        vis[v] = true;

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

    int components() {
        int compCount = 0;
        vector<bool> vis(m_n, false);

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

        return compCount;
    }

    void minDist(int start) {
        vector<int> dist(m_n, -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] << ' ';
        }
    }

    Graph(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);
    }

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

    return 0;
}