33 lines
621 B
Text
33 lines
621 B
Text
import cp.
|
|
|
|
% CP approach
|
|
queens_cp(N, Q) =>
|
|
Q = new_list(N),
|
|
Q :: 1..N,
|
|
|
|
all_different(Q),
|
|
all_different([$Q[I]-I : I in 1..N]),
|
|
all_different([$Q[I]+I : I in 1..N]),
|
|
solve([ff],Q).
|
|
|
|
% SAT approach (using a N x N matrix)
|
|
queens_sat(N,Q) =>
|
|
Q = new_array(N,N),
|
|
Q :: 0..1,
|
|
|
|
foreach (K in 1-N..N-1)
|
|
sum([Q[I,J] : I in 1..N, J in 1..N, I-J==K]) #=< 1
|
|
end,
|
|
|
|
foreach (K in 2..2*N)
|
|
sum([Q[I,J] : I in 1..N, J in 1..N, I+J==K]) #=< 1
|
|
end,
|
|
|
|
foreach (I in 1..N)
|
|
sum([Q[I,J] : J in 1..N]) #= 1
|
|
end,
|
|
|
|
foreach (J in 1..N)
|
|
sum([Q[I,J] : I in 1..N]) #= 1
|
|
end,
|
|
solve([inout],Q).
|