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 fad1b07018 Squashed 'software/minizinc/' content from commit 4f10c8205
git-subtree-dir: software/minizinc
git-subtree-split: 4f10c82056ffcb1041d7ffef29d77a7eef92cf76
2021-06-16 14:06:46 +10:00

84 lines
1.9 KiB
MiniZinc

/***
!Test
expected:
- !Result
solution: !Solution
q:
- [0, 0, 0, 0, 0, 0, 0, 1]
- [0, 0, 0, 1, 0, 0, 0, 0]
- [1, 0, 0, 0, 0, 0, 0, 0]
- [0, 0, 1, 0, 0, 0, 0, 0]
- [0, 0, 0, 0, 0, 1, 0, 0]
- [0, 1, 0, 0, 0, 0, 0, 0]
- [0, 0, 0, 0, 0, 0, 1, 0]
- [0, 0, 0, 0, 1, 0, 0, 0]
- !Result
solution: !Solution
q:
- [0, 0, 0, 1, 0, 0, 0, 0]
- [0, 0, 0, 0, 0, 1, 0, 0]
- [0, 0, 0, 0, 0, 0, 0, 1]
- [0, 0, 1, 0, 0, 0, 0, 0]
- [1, 0, 0, 0, 0, 0, 0, 0]
- [0, 0, 0, 0, 0, 0, 1, 0]
- [0, 0, 0, 0, 1, 0, 0, 0]
- [0, 1, 0, 0, 0, 0, 0, 0]
- !Result
solution: !Solution
q:
- [0, 0, 0, 0, 1, 0, 0, 0]
- [0, 0, 0, 0, 0, 0, 0, 1]
- [0, 0, 0, 1, 0, 0, 0, 0]
- [1, 0, 0, 0, 0, 0, 0, 0]
- [0, 0, 0, 0, 0, 0, 1, 0]
- [0, 1, 0, 0, 0, 0, 0, 0]
- [0, 0, 0, 0, 0, 1, 0, 0]
- [0, 0, 1, 0, 0, 0, 0, 0]
***/
% 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 :: add_to_output;
%
% 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" ];