dsalgo 0.3.10

A package for Datastructures and Algorithms.
Documentation
pub fn bfs_level(
    g: &[Vec<usize>],
    src: usize,
) -> Vec<usize> {
    let n = g.len();

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

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

    que.push_back(src);

    lv[src] = 0;

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

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

            que.push_back(v);
        }
    }

    lv
}

#[cfg(test)]

mod tests {

    use super::*;

    #[test]

    fn test() {
        let cases = vec![(
            vec![vec![1, 2], vec![0, 3], vec![0, 3], vec![1, 2]],
            0,
            vec![0, 1, 1, 2],
        )];

        for (g, src, ans) in cases {
            assert_eq!(bfs_level(&g, src), ans);
        }
    }
}