Cod sursa(job #2195539)

Utilizator horiahoria1Horia Alexandru Dragomir horiahoria1 Data 16 aprilie 2018 18:36:15
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
#include <vector>
#include <climits>
#include <queue>

void bfs(int source, std::vector<int> &dist, std::vector<int> *adj) {
    std::queue<int> q;
    dist[source] = 0;
    q.push(source);
    while (!q.empty()) {
        int node = q.front();
        for (auto &neighbour : adj[node]) {
            if (dist[node] + 1 < dist[neighbour]) {
                dist[neighbour] = dist[node] + 1;
                q.push(neighbour);
            }
        }
        q.pop();
    }
}

int main() {

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

    int n, m, source;
    in >> n >> m >> source;

    std::vector<int> adj[n + 1];
    std::vector<int> dist(n + 1, INT_MAX);

    int i;
    int u, v;

    for (i = 0; i < m; ++i) {
        in >> u >> v;
        adj[u].push_back(v);
    }

    bfs(source, dist, adj);

    for (i = 1; i <= n; ++i) {
        if (dist[i] == INT_MAX) {
            dist[i] = -1;
        }
        out << dist[i] << ' ';
    }

    in.close();
    out.close();

    return 0;
}