fork(2) download
  1. open List
  2.  
  3. let rec safe (x1, y1) (x2, y2) =
  4. x1 <> x2 && y1 <> y2 && x2 - x1 <> y2 - y1 && x1 - y2 <> x2 - y1;;
  5.  
  6. let rec search f n qs ps accu = match ps with
  7. | [] -> if length qs = n then f qs accu else accu
  8. | q::ps -> search f n (q::qs) (filter (safe q) ps) (search f n qs ps accu)
  9.  
  10. let n = try int_of_string Sys.argv.(1) with _ -> 8
  11.  
  12. let rec init n f = if n=0 then [] else f(n-1) :: init (n-1) f
  13.  
  14. let ps = flatten (init n (fun i -> init n (fun j -> i, j)))
  15.  
  16. let print qs =
  17. let a = Array.init n (fun _ -> String.make n '.') in
  18. List.iter (fun (x, y) -> a.(y).[x] <- 'Q') qs;
  19.  
  20. let sols = search (fun qs -> print qs; (+) 1) n [] ps 0;;
  21.  
Runtime error #stdin #stdout 0s 4168KB
stdin
Standard input is empty
stdout
Standard output is empty