:-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). |
|