Cod sursa(job #2663956)

Utilizator CostinteoGrigore Costin Teodor Costinteo Data 27 octombrie 2020 17:41:01
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <queue>


void read(std::vector <std::vector <int>> &adj, int &n, int &node) {
    std::ifstream f("bfs.in");
    f >> n;
    adj.resize(n);
    int edges;
    f >> edges;
    f >> node;
    for (int i = 0; i < edges; i++) {
        int x, y;
        f >> x >> y;
        adj[x - 1].push_back(y - 1);
    }
    f.close();
}

void bf_search(const int x, const std::vector <std::vector <int>> &adj, const int &n) {
    std::queue <int> q;
    std::vector <int> visited;
    std::vector <int> distance;

    visited.assign(n, 0);
    distance.assign(n, -1);

    visited[x] = 1;
    distance[x] = 0;
    q.push(x);
    while (!q.empty()) {
        for (int i = 0; i < adj[q.front()].size(); i++) {
            if (!visited[adj[q.front()][i]]) {
                q.push(adj[q.front()][i]);
                distance[adj[q.front()][i]] = distance[q.front()] + 1;
            }
        }
        q.pop();
    }

    std::ofstream g("bfs.out");

    for (int i = 0; i < distance.size(); i++) {
        g << distance[i] << " ";
    }

    g.close();
}

int main() {
    std::vector <std::vector <int>> adj;
    int n, x;
    read(adj, n, x);
    bf_search(x - 1, adj, n);
    return 0;
}