El problema del recorrido del caballo de ajedrez - backtracking La peregrinación del caballo de ajedrez consiste en su paseo por todas las casillas del tablero sin pasar dos veces por la misma, utilizando sus movimientos: dos casillas horizontales y una vertical o a la inversa. Cuando desde la última casilla podamos pasar a la primera se trata de una "peregrinación cerrada". Para resolver este problema se puede utilizar la técnica de backtracking con un algoritmo recursivo relativamente simple: marcar la posición solicitada, hacer una lista de las siguientes posiciones vacías a las que se puede saltar desde la posición marcar, y tomar la primera de ellas, marcándola entonces en forma recursiva. Si en alguno de los pasos recursivos no se alcanza una solución, la casilla se desmarca y se pasa a la siguiente que estaba en la lista. Si se termina la lista y no se llega a una solución, entonces se devuelve a la casilla anterior desde la que se hizo el llamado. LA SOLUCION EN JAVA PARA ESTA SOLUCION ES LA SIGUIENTE : public class ProblemaCaballo { final int numFilas; final int numColumnas; int[][] tablero; int contador; public ProblemaCaballo(int nf, int nc) { numFilas = nf; numColumnas = nc; tablero = new int[nf][nc]; } public void mostrarTablero() { for(int i=0; i
if(esValido(f-2,c-1)){ resp[pos][0]=f-2; resp[pos++][1]=c-1; } if(esValido(f-2,c+1)){ resp[pos][0]=f-2; resp[pos++][1]=c+1; } if(esValido(f-1,c-2)){ resp[pos][0]=f-1; resp[pos++][1]=c-2; } if(esValido(f-1,c+2)){ resp[pos][0]=f-1; resp[pos++][1]=c+2; } if(esValido(f+2,c-1)){ resp[pos][0]=f+2; resp[pos++][1]=c-1; } if(esValido(f+2,c+1)){ resp[pos][0]=f+2; resp[pos++][1]=c+1; } if(esValido(f+1,c-2)){ resp[pos][0]=f+1; resp[pos++][1]=c-2; } if(esValido(f+1,c+2)){ resp[pos][0]=f+1; resp[pos++][1]=c+2; } int[][] tmp = new int[pos][2]; for(int i=0; i
numFilas-1 || c<0 || c>numColumnas-1) return false; if(tablero[f][c]!=0) return false; return true; } public static void main(String[] args) { ProblemaCaballo pc = new ProblemaCaballo(8,8); pc.resolverProblema(0,0,1); pc.mostrarTablero(); System.out.printf("Cantidad de veces que entra al ciclo: %,d %n", pc.co ntador); } }