Estoy tratando de hacer el codigo del salto del caballo ahora que estoy aprendiendo a usar backtracking pero tengo un problema con el codigo que cuando lo ejecuto me muestra el tablero de ajedrez con posiciones que no corresponden al salto que deberia dar el caballo
el codigo de la funcion que ejecuta el metodo de backtracking es el siguiente
bool moverCaballo(int x,int y,int cont) {
bool listo = false;
mat
if ( cont == N*N) {
return true;
}
if ( !listo && verificarCasilla(x+2,y+1) ) {
listo = moverCaballo(x+2,y+1,++cont);
}
if ( !listo && verificarCasilla(x+1,y+2) ) {
listo = moverCaballo(x+1,y+2,++cont);
}
if ( !listo && verificarCasilla(x-1,y+2) ) {
listo = moverCaballo(x-1,y+2,++cont);
}
if ( !listo && verificarCasilla(x-2,y+1) ) {
listo = moverCaballo(x-2,y+1,++cont);
}
// izquierda
if ( !listo && verificarCasilla(x+2,y-1) ) {
listo = moverCaballo(x+2,y-1,++cont);
}
if ( !listo && verificarCasilla(x+1,y-2) ) {
listo = moverCaballo(x+1,y-2,++cont);
}
if ( !listo && verificarCasilla(x-1,y-2) ) {
listo = moverCaballo(x-1,y-2,++cont);
}
if ( !listo && verificarCasilla(x-2,y-1) ) {
listo = moverCaballo(x-2,y-1,++cont);
}
if( !listo) {
mat
}
return listo;
}
El metodo que verifica que una casilla sea valida
bool verificarCasilla(int x,int y) {
if ( mat
return false;
}
else if ( x >=N || y >= M || x < 0 || y < 0 ) {
return false;
}
return true;
}
Y la funcion principal
#define N 5
#define M 5
int mat[N][M] = {0};
int main() {
moverCaballo(0,0,1);
imprimirMatriz();
system("pause");
return 0;
}
pero el resultado que muestra es el siguiente
1 11 16 0 0
18 23 0 10 15
12 2 5 20 7
25 19 8 14 4
0 13 3 6 0
Presione una tecla para continuar . . .
cuando lo que me deberia mostrar es lo siguiente
Cita:
1 16 11 6 3
10 5 2 17 12
15 22 19 4 7
20 9 24 13 18
23 14 21 8 25
Por mas que pienso y busco no consigo encontrar la falla lo mas seguro es que sea un error logico pero no logro encontrarlo les agradeceria si mi ayudaran a encontrar el error para solucionarlo