Cod sursa(job #2774801)

Utilizator ps2001Silviu Popescu ps2001 Data 12 septembrie 2021 21:02:26
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <bits/stdc++.h>

using namespace std;

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

    int n, m, s;
    fin >> n >> m >> s;

    vector<vector<int>> gr(n + 1);
    for (int i = 0; i < m; i++) {
        int u, v;
        fin >> u >> v;
        gr[u].push_back(v);
    }

    vector<int> visited(n + 1);
    vector<int> dist(n + 1);

    auto bfs = [&](int s) {
        queue<int> q;
        visited[s] = 1;
        q.push(s);

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

            for (auto &x : gr[node]) {
                if (visited[x] == 0) {
                    visited[x] = 1;
                    dist[x] = dist[node] + 1;
                    q.push(x);
                }
            }
        }
    };

    bfs(s);

    for (int i = 1; i <= n; i++) {
        if (dist[i] == 0 && i != s)
            dist[i] = -1;

        fout << dist[i] << ' ';
    }
    
    fout << '\n';
    return 0;
}