Prolog code:

This solution uses CLP(FD) constraints to model the problem. In particular, the

- one
*node*per board position - one
*edge*between those nodes that can be reached via knight's moves.

You need SWI-Prolog >= 5.8.0 (recommended: latest git version). Start it with

$ swipl knight.pl

Example queries that you can try:

?- n_tour(N, Ts), maplist(label, Ts). ?- n_tour(N, Ts), maplist(label, Ts), print_tour(Ts). ?- show(8, [ff], Ts). ?- show(N, [ff], Ts), print_tour(Ts).

Sample solutions for N = 6, 8, 12, 16:

Challenges: Find solutions for large boards. Find good labeling and allocation strategies. ...

More about Prolog: