mazeir/algorithm/
depth_first.rs

1use rand::{Rng, SeedableRng};
2
3use rand_xorshift::XorShiftRng;
4
5pub trait DepthFirst {
6    fn depth_first_with_rng<R: Rng + ?Sized>(&mut self, rng: &mut R);
7
8    fn depth_first_with_seed(&mut self, seed: [u8; 16]) {
9        let mut rng = XorShiftRng::from_seed(seed);
10        self.depth_first_with_rng(&mut rng);
11    }
12    fn depth_first_with_str_seed(&mut self, seed: &str) {
13        let mut seed_u8 = [0; 16];
14        for (index, byte) in seed.as_bytes().iter().enumerate() {
15            seed_u8[index % 16] = *byte;
16        }
17        let mut rng = XorShiftRng::from_seed(seed_u8);
18        self.depth_first_with_rng(&mut rng);
19    }
20
21    fn depth_first(&mut self) {
22        let mut rng = XorShiftRng::from_entropy();
23        self.depth_first_with_rng(&mut rng);
24    }
25}