rustgym 0.2.0

rustgym solutions
Documentation
struct Solution;

use std::collections::HashSet;
use std::collections::VecDeque;

impl Solution {
    fn shortest_path_length(graph: Vec<Vec<i32>>) -> i32 {
        let n = graph.len();
        let adj: Vec<Vec<usize>> = graph
            .into_iter()
            .map(|v| v.into_iter().map(|i| i as usize).collect())
            .collect();
        let mut visited: HashSet<(u32, usize)> = HashSet::new();
        let mut queue: VecDeque<(u32, usize, i32)> = VecDeque::new();
        for i in 0..n {
            visited.insert((1 << i, i));
            queue.push_back((1 << i, i, 0));
        }
        while let Some((bitset, i, d)) = queue.pop_front() {
            if bitset == (1 << n) - 1 {
                return d;
            }
            for &j in &adj[i] {
                let next_bitset = bitset | (1 << j);
                if visited.insert((next_bitset, j)) {
                    queue.push_back((next_bitset, j, d + 1));
                }
            }
        }
        0
    }
}

#[test]
fn test() {
    let graph = vec_vec_i32![[1, 2, 3], [0], [0], [0]];
    let res = 4;
    assert_eq!(Solution::shortest_path_length(graph), res);
    let graph = vec_vec_i32![[1], [0, 2, 4], [1, 3, 4], [2], [1, 2]];
    let res = 4;
    assert_eq!(Solution::shortest_path_length(graph), res);
}