blob: fc5654208ecdf9581c25c7188f65c8814fe90994 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
let rec member x alist =
match alist with
[] -> false
| y::ys -> if x=y then true else (member x ys);;
let rec threat k m alist =
match alist with
[] -> false
| x::xs -> if (k = x-m) || (k = m-x) then true
else (threat (k+1) m xs);;
let rec queen1 m b n =
match m with
0 -> []
| m ->
if (member m b) || (threat 1 m b) then (queen1 (m-1) b n)
else if (List.length b) = (n-1) then [m::b]@(queen1 (m-1) b n)
else (queen1 n (m::b) n) @ (queen1 (m-1) b n);;
let queen n = queen1 n [] n;;
let n = 12;;
let () = print_int (List.length (queen n));
|