|
0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 Xpress-Mosel Model
model 'kntdom'
! Description : Knight domination puzzle - all squares threatened
! Source : M Kraitchik - Mathematical Recreations (P256)
! Date written : MAGIC 16/12/92, Xpress-MP 15/6/98, Mosel 17/4/03
! Written by : M J Chlond
uses 'mmxprs'
parameters
rows = 8
cols = 8
end-parameters
declarations
x: array(1..rows+4,1..cols+4) of mpvar
a: array(1..rows+4,1..cols+4) of mpvar
end-declarations
minnum:= sum(i in 3..rows+2,j in 3..cols+2) x(i,j)
! Every real square threatened
forall(i in 3..rows+2,j in 3..cols+2)
sq(i,j):= x(i-2,j-1)+x(i-1,j-2)+x(i+1,j-2)+x(i+2,j-1)+
x(i+2,j+1)+x(i+1,j+2)+x(i-1,j+2)+x(i-2,j+1) >= 1
! Dummy squares not occupied
setzero:= sum(i in 1..2,j in 1..cols+4) x(i,j)+
sum(i in rows+3..rows+4,j in 1..cols+4) x(i,j)+
sum(j in 1..2,i in 3..rows+2) x(i,j)+
sum(j in rows+3..rows+4,i in 3..rows+2) x(i,j) = 0
forall(i in 1..rows+4,j in 1..cols+4)
x(i,j) is_binary
minimise(minnum)
write(getsol(minnum))
writeln
forall(i in 3..rows+2) do
forall(j in 3..cols+2 )
write(getsol(x(i,j)),' ')
writeln
end-do
end-model
|