dsalgo/
graph_bfs_level.rs

1pub fn bfs_level(
2    g: &[Vec<usize>],
3    src: usize,
4) -> Vec<usize> {
5    let n = g.len();
6
7    let mut lv = vec![n; n];
8
9    let mut que = std::collections::VecDeque::new();
10
11    que.push_back(src);
12
13    lv[src] = 0;
14
15    while let Some(u) = que.pop_front() {
16        for &v in g[u].iter() {
17            if lv[v] != n {
18                continue;
19            }
20
21            lv[v] = lv[u] + 1;
22
23            que.push_back(v);
24        }
25    }
26
27    lv
28}
29
30#[cfg(test)]
31
32mod tests {
33
34    use super::*;
35
36    #[test]
37
38    fn test() {
39        let cases = vec![(
40            vec![vec![1, 2], vec![0, 3], vec![0, 3], vec![1, 2]],
41            0,
42            vec![0, 1, 1, 2],
43        )];
44
45        for (g, src, ans) in cases {
46            assert_eq!(bfs_level(&g, src), ans);
47        }
48    }
49}