11use std:: {
22 cell:: RefCell ,
3- collections:: HashMap ,
3+ collections:: { BinaryHeap , HashMap } ,
44 rc:: { Rc , Weak } ,
55} ;
66
@@ -118,7 +118,7 @@ fn unwrap_index<const DIMS: usize>(lengths: &[usize; DIMS], index: usize) -> Opt
118118// Generate a maze with the provided number of side lengths.
119119pub fn generate_maze < const DIMS : usize > (
120120 lengths : & [ usize ; DIMS ] ,
121- rng : impl rand:: Rng ,
121+ rng : & mut impl rand:: Rng ,
122122) -> impl Maze < DIMS > {
123123 let mut maze = WalkMaze :: < DIMS > {
124124 lengths : lengths. clone ( ) ,
@@ -134,14 +134,14 @@ pub fn generate_maze<const DIMS: usize>(
134134 cells. insert ( pos, MazeGenCell :: new ( index) ) ;
135135 }
136136
137- let mut pending_edges = Vec :: with_capacity ( cell_count * DIMS ) ;
137+ let mut pending_edges = BinaryHeap :: with_capacity ( cell_count * DIMS ) ;
138138 for index in 0 ..cell_count {
139139 for dim in 0 ..DIMS {
140- pending_edges. push ( ( index, dim) )
140+ pending_edges. push ( ( rng . next_u32 ( ) , index, dim) )
141141 }
142142 }
143143
144- while let Some ( ( target_index, dim) ) = pending_edges. pop ( ) {
144+ while let Some ( ( _ , target_index, dim) ) = pending_edges. pop ( ) {
145145 let a = unwrap_index ( lengths, target_index) . unwrap ( ) ;
146146 if a[ dim] == lengths[ dim] {
147147 continue ;
@@ -202,8 +202,8 @@ mod tests {
202202
203203 #[ test]
204204 fn verify_generates ( ) {
205- let rng = StdRng :: seed_from_u64 ( 684153987 ) ;
206- let maze = generate_maze ( & [ 5 , 5 , 5 , 5 , 5 ] , rng) ;
205+ let mut rng = StdRng :: seed_from_u64 ( 684153987 ) ;
206+ let maze = generate_maze ( & [ 5 , 5 , 5 , 5 , 5 ] , & mut rng) ;
207207
208208 assert_eq ! (
209209 maze. can_move( & [ 1 , 2 , 3214 , 2 , 2 ] , 2 , MazeMoveDir :: Forward ) ,
@@ -213,8 +213,8 @@ mod tests {
213213
214214 #[ test]
215215 fn verify_generates_single ( ) {
216- let rng = StdRng :: seed_from_u64 ( 684153987 ) ;
217- let maze = generate_maze ( & [ 5 , 1 , 1 ] , rng) ;
216+ let mut rng = StdRng :: seed_from_u64 ( 684153987 ) ;
217+ let maze = generate_maze ( & [ 5 , 1 , 1 ] , & mut rng) ;
218218
219219 assert_eq ! (
220220 maze. can_move( & [ 0 , 0 , 0 ] , 0 , MazeMoveDir :: Forward ) ,
0 commit comments