Cod sursa(job #2663989)

Utilizator CostinteoGrigore Costin Teodor Costinteo Data 27 octombrie 2020 18:40:45
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <iterator>
#include <queue>

#define NMAX 1000001

std::vector <int> adj[NMAX];
int distance[NMAX];
int q[NMAX], left = 0, right = 0;

void read(int &n, int &node) {
    std::ifstream f("bfs.in");
    f >> 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(int x, int n) {

    int i, j;

    for (int i = 0; i < n; i++) {
        distance[i] = -1;
    }

    distance[x] = 0;
    q[right] = x;
    for (i = 0; i <= left; i++)
        for (j = 0; j < adj[q[i]].size(); j++)
            if (distance[adj[q[i]][j]] == -1)
            {
                q[++left] = adj[q[i]][j];
                distance[q[left]] = distance[q[i]] + 1;
            }

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

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

    g.close();
}

int main() {
    int n, x;
    read(n, x);
    bf_search(x - 1, n);
    return 0;
}