Cod sursa(job #2209283)

Utilizator Evrika12Mihnea Rontescu Evrika12 Data 2 iunie 2018 16:20:40
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#define N 100001
#define M 1000001

int start[N], value[M], next[M], count;

inline void add(int from, int to) {
    ++count;
    value[count] = to;
    next[count] = start[from];
    start[from] = count;
}

int q[M], st, dr, r[N];

void dfs(int x) {
    int dist = r[x] + 1;
    int p = start[x], y;
    while (p != 0) {
        y = value[p];
        if (r[y] != -1) {
            p = next[p];
            continue;
        }
        r[y] = dist;
        q[++dr] = y;
        p = next[p];
    }
}

int main() {
    std::ifstream in("bfs.in");
    std::ofstream out("bfs.out");
    int i, n, m, s, x, y;
    in >> n >> m >> s;
    for (i = 0; i < m; ++i) {
        in >> x >> y;
        add(x, y);
    }
    for (i = 1; i <= n; ++i) r[i] = -1;
    q[0] = s;
    r[s] = 0;
    while (st <= dr) {
        dfs(q[st]);
        ++st;
    }
    for (i = 1; i <= n; ++i) out << r[i] << ' ';
}