Cod sursa(job #3252185)

Utilizator rizesqlStefan Rizescu rizesql Data 28 octombrie 2024 19:39:03
Problema BFS - Parcurgere in latime Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#include <vector>

#define maxn 100010

int N, M, L, Start;
std::vector<int> A[maxn];
int G[maxn], Q[maxn], distances[maxn];

void BFS(int nod) {
    int i, j;

    for (auto idx = 1; idx <= M; ++idx) {
        distances[idx] = -1;
    }

    L = 1;
    distances[nod] = 0;
    Q[L] = nod;

    for (i = 1; i <= L; i++) {
        for (j = 0; j < G[Q[i]]; j++) {
            if (distances[A[Q[i]][j]] == -1) {
                Q[++L] = A[Q[i]][j];
                distances[Q[L]] = distances[Q[i]] + 1;
            }
        }
    }
}

int main() {
    auto in = std::ifstream{"bfs.in"};
    auto out = std::ofstream{"bfs.out"};


    in >> N >> M >> Start;

    int x, y;
    for (int i = 1; i <= M; i++) {
        in >> x >> y;
        A[x].push_back(y);
    }

    for (int i = 1; i <= N; i++)
        G[i] = A[i].size();

    BFS(Start);

    for (int i = 1; i <= N; i++) {
        out << distances[i] << " ";
    }
    out << "\n";

    return 0;
}