dsalgo 0.3.10

A package for Datastructures and Algorithms.
Documentation
/// return (parents, depths)

pub fn bfs(
    g: &[Vec<usize>],
    root: usize,
) -> (Vec<usize>, Vec<usize>) {
    let n = g.len();

    let mut p = vec![n; n];

    p[root] = root;

    let mut d = vec![0; n];

    let mut que = std::collections::VecDeque::new();

    que.push_back(root);

    while let Some(u) = que.pop_front() {
        for &v in g[u].iter() {
            if v == p[u] {
                continue;
            }

            p[v] = u;

            d[v] = d[u] + 1;

            que.push_back(v);
        }
    }

    (p, d)
}