solução eficiente tour do cavaleiro
Eu construí um código no prólogo para encontrar uma série de movimentos legais nos quais o cavaleiro pousa em cada quadrado do tabuleiro de xadrez (8x8) exatamente uma vez.
Eu usei uma lógica como abaixo: Existem 8 tipos de movimentos de cavaleiro:
direita 1 para baixo 2deixou 1 para baixo 2direita 2 para baixo 1deixou 2 para baixo 1direito 1 até 2deixou 1 até 2direito 2 até 1deixou 2 para cima 1direita 1 abaixo 2 movimentos:
move(X,Y) :-
C_X is X mod 8,
R_X is X // 8,
C_Y is C_X + 1, % 1 right
C_Y < 8,
R_Y is R_X + 2, % 2 down
R_Y < 8,
Y is R_Y * 8 + C_Y,
Y >= 0,
X >= 0,
X < 64,
Y < 64.
E isso é repetido para todos os 8 tipos de movimentos
O problema é que meu código não é eficiente, são necessárias muitas etapas para encontrar o caminho certo. Alguém conhece uma maneira eficiente de resolver esse problema?