Cod sursa(job #2193957)

Utilizator pakistanezuPopescu Alexandru Gabriel pakistanezu Data 11 aprilie 2018 20:37:35
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <queue>

#define NMAX 100001
#define INF (1 << 30)
std::ifstream f("bfs.in");
std::ofstream g("bfs.out");
class Task {
public:
    void solve() {
        read_input();
        get_result();
    }
private:
    int n, m, source;
    std::vector<int> adj[NMAX];

    void get_result() {
        std::vector<int> d(n + 1);
        bfs(source, d);
        for (int i = 1; i <= n; ++i) {
            if (d[i] == INF) {
                g << -1 << ' ';
            } else {
                g << d[i] << ' ';
            }
        }
    }

    void read_input() {
        f >> n >> m >> source;
        int x, y;
        for (int i = 1; i <= m; ++i) {
            f >> x >> y;
            adj[x].push_back(y);
        }
    }

    void bfs(int source, std::vector<int> &d) {
        for (int i = 1; i <= n; ++i) {
            d[i] = INF;
        }
        std::queue<int> Q;
        Q.push(source);
        d[source] = 0;
        while(!Q.empty()) {
            int node = Q.front();
            Q.pop();
            for (auto &v : adj[node]) {
                if (d[node] + 1 < d[v]) {
                    d[v] = d[node] + 1;
                    Q.push(v);
                }
            }
        }
    }
};
int main() {
    Task *task = new Task();
    task->solve();
    delete task;
    return 0;
}