Cod sursa(job #2487009)

Utilizator davidegoldDavide Gold davidegold Data 3 noiembrie 2019 19:28:38
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include <queue>

using namespace std;

ifstream cin("bfs.in");
ofstream cout("bfs.out");


class Graph{
public:
    vector<vector<int>> e;
    int n_nodes;

    void build_graph(int num_nodes, int num_edges, bool directed) {
        n_nodes = num_nodes;
        e.resize(n_nodes);

        while (num_edges --){
            int x, y;
            cin >> x >> y;
            x --; y--;
            e[x].push_back(y);
            if (!directed)
                e[y].push_back(x);


        }

    }

};

vector <int> bfs(Graph &g, int source) {
    queue <int> q;
    q.push(source);

    vector <int> res(g.n_nodes, -1);
    res[source] = 0;

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

        for (auto next : g.e[cur])
            // undiscovered node
            if (res[next] == -1) {
                res[next] = res[cur] + 1;
                q.push(next);
            }
    }

    return res;

}


int main() {

    int source, num_nodes, num_edges;
    cin >> num_nodes >> num_edges >> source;
    source--;

    Graph g;
    g.build_graph(num_nodes, num_edges, true);

    vector<int> result = bfs(g, source);
    for (auto x : result)
        cout << x << " ";

    return 0;
}