dsalgo/
graph_bfs_level.rs1pub 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}