32 lines
622 B
OCaml
32 lines
622 B
OCaml
let solutions n =
|
|
|
|
let show board =
|
|
let pr v =
|
|
for i = 1 to n do
|
|
print_string (if i=v then " q" else " _");
|
|
done;
|
|
print_newline() in
|
|
List.iter pr board;
|
|
print_newline() in
|
|
|
|
let rec safe i j k = function
|
|
| [] -> true
|
|
| h::t -> h<>i && h<>j && h<>k && safe i (j+1) (k-1) t in
|
|
|
|
let rec loop col p =
|
|
for i = 1 to n
|
|
do
|
|
if safe i (i+1) (i-1) p then
|
|
let p' = i::p in
|
|
if col = n then show p'
|
|
else loop (col+1) p'
|
|
done in
|
|
|
|
loop 1 [] in
|
|
|
|
let n =
|
|
if Array.length Sys.argv > 1
|
|
then int_of_string Sys.argv.(1)
|
|
else 8 in
|
|
|
|
solutions n
|