Cod sursa(job #3124263)

Utilizator mihaisoare349Soare Mihai-Alexandru mihaisoare349 Data 27 aprilie 2023 16:19:32
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <iterator>

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

void bfs(std::vector<std::vector<int>> const &adj, std::queue<int> &q, std::vector<int> &distance) {
    if(q.empty())
        return;

    int node = q.front();
    q.pop();

    for(auto n : adj[node]) {
        if(distance[n] == -1) {
            q.push(n);
            distance[n] = distance[node] + 1;
        }
    }

    bfs(adj, q, distance);
}

int main() {
    int n, m, s;
    fin >> n >> m >> s;
    std::vector<std::vector<int>> adj(n);
    while(m--) {
        int a, b;
        fin >> a >> b;
        a--, b--;
        adj[a].push_back(b);
    }

    std::vector<int> distance(n, -1);
    {
        std::queue<int> tmp({s});
        bfs(adj, tmp, distance);
    }
    std::copy(distance.begin(), distance.end(), std::ostream_iterator<int>(fout, " "));
    return 0;
}