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 1

direita 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?

questionAnswers(2)

yourAnswerToTheQuestion