mazeir/algorithm/
depth_first.rs1use 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}