main :- statistics(runtime, _), knight5_all, statistics(runtime, [_,T]), write('CPU time = '), write(T), write(' msec'), nl. knight5_all :- knight5(Tour), % write(Tour), nl, fail. knight5_all. knight5(Tour) :- (k(1,1), k(1,2), k(1,3), k(1,4), k(1,5), k(2,1), k(2,2), k(2,3), k(2,4), k(2,5), k(3,1), k(3,2), k(3,3), k(3,4), k(3,5), k(4,1), k(4,2), k(4,3), k(4,4), k(4,5), k(5,1), k(5,2), k(5,3), k(5,4), k(5,5)) -<> tour(Tour). tour(Tour) :- k(1, 1), tour(1, 1, Tour). tour(I, J, [(I,J)]). tour(I, J, [(I,J)|Tour]) :- next(I, J, I1, J1), k(I1, J1), tour(I1, J1, Tour). next(I, J, I1, J1) :- I1 is I-2, J1 is J-1. next(I, J, I1, J1) :- I1 is I-2, J1 is J+1. next(I, J, I1, J1) :- I1 is I-1, J1 is J-2. next(I, J, I1, J1) :- I1 is I-1, J1 is J+2. next(I, J, I1, J1) :- I1 is I+1, J1 is J-2. next(I, J, I1, J1) :- I1 is I+1, J1 is J+2. next(I, J, I1, J1) :- I1 is I+2, J1 is J-1. next(I, J, I1, J1) :- I1 is I+2, J1 is J+1.