Research Article

Top- Based Adaptive Enumeration in Constraint Programming

Algorithm 5

:-lib(ic).
knight_tour(N, Board):-
N2 is N*N,
length(Board, N2),
C = -2,-1,1,2,
alldifferent(Board),
( fromto(Board, Q1|Cols, Cols, ), param(N,C) do
  t_Q2(Cols,Q2),
  I:: 1..N,
  J:: 1..N,
  A:: C,
  B:: C,
  IA #= I+A,
  JB #= J+B,
  IA #>= 1,
  JB #>= 1,
  IA #=< N,
  JB #=< N,
  abs(A)+abs(B) #= 3,
  (I-1)*N + J #= Q1,
  Q2 #= (I-1+A)*N + J+B
),
% call to search predicate
t_Q2(A|B,A).
t_Q2(,A).