Cod sursa(job #3227926)

Utilizator matei.buzdeaBuzdea Matei matei.buzdea Data 3 mai 2024 22:16:59
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.43 kb
#include <bits/stdc++.h>

using namespace std;

class Task {
public:
    void solve() {
        read_input();
        print_output(bfs(source));
    }

private:
    static const int NMAX = (int)1e5 + 5;
    const int INF = 1e9;

    int n, m, source;
    vector<int> adj[NMAX];

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

    vector<int> bfs(int source)
    {
        vector<int> dist(n + 1, INF);
        queue<int> q;

        q.push(source);
        dist[source] = 0;

        while (!q.empty()) {
            int node = q.front();
            q.pop();

            for (auto& neigh : adj[node]) {
                if (dist[node] + 1 < dist[neigh]) {
                    dist[neigh] = dist[node] + 1;
                    q.push(neigh);
                }
            }
        }

        for (auto& value : dist) {
            if (value == INF) {
                value = -1;
            }
        }

        return dist;
    }

    void print_output(const vector<int>& dist) {
        for (int node = 1; node <= n; node++) {
            cout << dist[node] << ' ';
        }
    }
};

int main() {
    auto* task = new (nothrow) Task();
    if (!task) {
        cerr << "Error\n";
        return -1;
    }
    task->solve();
    delete task;
    return 0;
}