Maze generation: Difference between revisions

Content deleted Content added
Refactored code
m better shuffle function
Line 4,173: Line 4,173:
let ny = int_of_string Sys.argv.(2) in
let ny = int_of_string Sys.argv.(2) in


let rec random_order = function
let shuffle lst =
let nl = List.map (fun c -> (Random.bits (), c)) lst in
| [] -> []
List.map snd (List.sort compare nl) in
| [a] -> [a]
| x -> let i = Random.int (List.length x) in
let rec del i = function
| [] -> failwith "del"
| h::t -> if i = 0 then t else h :: del (i-1) t in
(List.nth x i) :: random_order (del i x) in


let get_neighbours (x,y) =
let get_neighbours (x,y) =
Line 4,191: Line 4,186:
let check k =
let check k =
if not (marked k) then (join cell k; visit k) in
if not (marked k) then (join cell k; visit k) in
List.iter check (random_order (get_neighbours cell)) in
List.iter check (shuffle (get_neighbours cell)) in


let print_maze () =
let print_maze () =