Cod sursa(job #3246499)

Utilizator andu9andu nita andu9 Data 3 octombrie 2024 14:31:16
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#include <vector>
#include <queue>

void BFS(std::vector<std::vector<int>>& graph, std::vector<int>& dist, int start) {
    dist[start] = 0;
    std::queue<int> q; q.push(start);
    while (!q.empty()) {
        int currNode = q.front(); q.pop();
        for (auto& neighbour : graph[currNode]) {
            if (dist[neighbour] == -1) {
                dist[neighbour] = dist[currNode] + 1;
                q.push(neighbour);
            }
        }
    }
}

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

    int n, m, s; fin >> n >> m >> s; s -= 1;
    std::vector<std::vector<int>> graph(n, std::vector<int>());
    for (int i = 0; i < m; i += 1) {
        int u, v; fin >> u >> v; u -= 1, v -= 1;
        graph[u].emplace_back(v), graph[v].emplace_back(v);
    }

    std::vector<int> dist(n, -1);
    BFS(graph, dist, s);

    for (int i = 0; i < n; i += 1) {
        fout << dist[i] << ' ';
    }

    graph.clear(), dist.clear();
    fin.close(), fout.close();
    return 0;
}