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 |
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 ( |
List.iter check (shuffle (get_neighbours cell)) in |
||
let print_maze () = |
let print_maze () = |