this repo has no description
at develop 1.1 kB view raw
1% RUNS ON mzn20_fd 2% RUNS ON mzn-fzn_fd 3% RUNS ON mzn20_fd_linear 4% RUNS ON mzn20_mip 5% n-queens example in Zinc using IP techniques 6% By Ralph Becket 7 8% MiniZinc version 9% Peter Stuckey September 30 2006 10 11int: n = 8; 12 13set of int: rg = 0 .. n-1; 14 15array [rg, rg] of var 0 .. 1: q; 16 17% 18% Every row and column has exactly one queen. 19% Every diagonal has at most one queen. 20% 21 22constraint forall (i in rg) ( 23 ( sum (j in rg) (q[i, j]) = 1 ) 24/\ ( sum (j in rg) (q[j, i]) = 1 ) 25/\ ( sum (j, k in rg where j - k = i) (q[j, k]) <= 1 ) 26/\ ( sum (j, k in rg where j - k = - i) (q[j, k]) <= 1 ) 27/\ ( sum (j, k in rg where j - k = i) (q[n - 1 - j, k]) <= 1 ) 28/\ ( sum (j, k in rg where j - k = - i) (q[n - 1 - j, k]) <= 1 ) 29); 30 31% 32% Find the first solution. 33% 34 35solve :: 36 int_search( 37 array1d(1..n*n, q), 38 first_fail, 39 indomain_min, 40 complete 41 ) 42 satisfy; 43 44output ["8 queens, IP version:"] ++ 45 [ if j = 0 then "\n" else "" endif ++ 46 if fix(q[i, j]) = 1 then "Q " else ". " endif 47 | i, j in rg 48 ] ++ 49 [ "\n" ];