Research Article

Top- Based Adaptive Enumeration in Constraint Programming

Algorithm 6

sudokusolve(ProblemName):-
problem(ProblemName, Board),
sudoku(3, Board).
sudoku(N, Board):-
N2 is N*N,
dim(Board, N2,N2),
Board1..N2,1..N2  :: 1..N2,
( for(I,1,N2), param(Board,N2) do
  Row is BoardI,1..N2,
  alldifferent(Row),
  Col is Board1..N2,I,
  alldifferent(Col)
),
( multifor(I,J,1,N2,N), param(Board,N) do
  ( multifor(K,L,0,N-1), param(Board,I,J),
   foreach(X,SubSquare) do
    X is BoardI+K,J+L
  ),
  alldifferent(SubSquare)
),
term_variables(Board, Vars),
  % call to search predicate
write(Board).
problem(1, (
(_, _, 2, _, _, 5, _, 7, 9),
(1, _, 5, _, _, 3, _, _, _),
(_, _, _, _, _, _, 6, _, _),
(_, 1, _, 4, _, _, 9, _, _),
(_, 9, _, _, _, _, _, 8, _),
(_, _, 4, _, _, 9, _, 1, _),
(_, _, 9, _, _, _, _, _, _),
(_, _, _, 1, _, _, 3, _, 6),
(6, 8, _, 3, _, _, 4, _, _))).