Solution

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