1
0
This repository has been archived on 2025-03-06. You can view files and clone it, but cannot push or open issues or pull requests.
Jip J. Dekker f2a1c4e389 Squashed 'software/mza/' content from commit f970a59b17
git-subtree-dir: software/mza
git-subtree-split: f970a59b177c13ca3dd8aaef8cc6681d83b7e813
2021-07-11 16:34:30 +10:00

50 lines
1.1 KiB
MiniZinc

% RUNS ON mzn20_fd
% RUNS ON mzn-fzn_fd
% RUNS ON mzn20_fd_linear
% RUNS ON mzn20_mip
% n-queens example in Zinc using IP techniques
% By Ralph Becket
% MiniZinc version
% Peter Stuckey September 30 2006
int: n = 8;
set of int: rg = 0 .. n-1;
array [rg, rg] of var 0 .. 1: q;
%
% Every row and column has exactly one queen.
% Every diagonal has at most one queen.
%
constraint forall (i in rg) (
( sum (j in rg) (q[i, j]) = 1 )
/\ ( sum (j in rg) (q[j, i]) = 1 )
/\ ( sum (j, k in rg where j - k = i) (q[j, k]) <= 1 )
/\ ( sum (j, k in rg where j - k = - i) (q[j, k]) <= 1 )
/\ ( sum (j, k in rg where j - k = i) (q[n - 1 - j, k]) <= 1 )
/\ ( sum (j, k in rg where j - k = - i) (q[n - 1 - j, k]) <= 1 )
);
%
% Find the first solution.
%
solve ::
int_search(
array1d(1..n*n, q),
first_fail,
indomain_min,
complete
)
satisfy;
output ["8 queens, IP version:"] ++
[ if j = 0 then "\n" else "" endif ++
if fix(q[i, j]) = 1 then "Q " else ". " endif
| i, j in rg
] ++
[ "\n" ];