• Miércoles 15 de Abril de 2026, 07:31

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - vertrigo

Páginas: [1]
1
C/C++ / Salto de caballo y backtracking
« en: Viernes 20 de Febrero de 2009, 17:45 »
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

Citar
bool moverCaballo(int x,int y,int cont) {
   
     bool listo = false;
             
        mat
  • [y] = cont;

           
     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
  • [y] = 0;  

          }

     return listo;
     
}


El metodo que verifica que una casilla sea valida

Citar
bool verificarCasilla(int x,int y) {
     if ( mat
  • [y] != 0 ) {

        return false;    
     }
     else if ( x >=N || y >= M || x < 0 || y < 0 ) {
        return false;    
     }
  return true;  
}

Y la funcion principal

Citar
#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


Citar
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:

Citar
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

Páginas: [1]