Cod sursa(job #2211181)

Utilizator SpiristulTeribilStefan Vilcu SpiristulTeribil Data 9 iunie 2018 15:10:20
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include <fstream>
#define N 100001
#define M 1000001

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

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 bfs(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() {
    int n, m, s, x, y ;
    fin >> n >> m >> s;
    for (int i = 0; i < m; ++i) {
        fin >> x >> y ;
        add(x, y) ;
    }
    for (int i = 1; i <= n; ++i) {
            r[i] = -1 ;
    }
    q[0] = s ;
    r[s] = 0 ;
    while (st <= dr) {
        bfs(q[st]) ;
        ++st ;
    }
    for (int i = 1; i <= n; ++i)
        fout << r[i] << ' ';
}