Cod sursa(job #2134132)

Utilizator mateidanutDanut Gabriel Matei mateidanut Data 17 februarie 2018 17:46:53
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <queue>
#define NMAX (100000 + 3)
#define MMAX (1000000 + 3)
using namespace std;


void BFS(int n, int source, int distance[], vector<int> neighbors[]) {
    for (int i = 1; i <= n; ++i) {
        distance[i] = -1;
    }

    distance[source] = 0;
    queue<int> queue;
    queue.push(source);

    while (!queue.empty()) {
        int node = queue.front();
        queue.pop();

        for (const auto &ngbr : neighbors[node]) {
            if (distance[ngbr] == -1) {
                distance[ngbr] = distance[node] + 1;
                queue.push(ngbr);
            }
        }
    }
}

int main() {

    ifstream f("bfs.in");
    ofstream g("bfs.out");

    vector<int> neighbors[NMAX];
    int distance[NMAX];

    int n, m, i, j, source;

    f >> n >> m >> source;

    for (; m; --m) {
        int x, y;
        f >> x >> y;
        neighbors[x].push_back(y);
    }

    BFS(n, source, distance, neighbors);

    for (i = 1; i <= n; ++i) {
        g << distance[i] << " ";
    }

    return 0;
}