Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: jonathan1099 en 31 Octubre 2016, 00:03 am



Título: juego del caballo
Publicado por: jonathan1099 en 31 Octubre 2016, 00:03 am
hola necesito ayuda tengo que hacer el juego del caballo que me diga los movimientos del caballo pero yo tengo  que indicar la posicion de inicio q puede ser cualquiera en un tablero de 8*8;  y solo puedo es que inicie desde la esquina pero no se donde hacer q me lea la posicion de inicio


este  es mi codigo


Código
  1. #include <stdio.h>
  2.  
  3. #define N 7
  4. #define ncuad N*N
  5.  
  6. void mover(int tablero[][N], int i, int pos_x, int pos_y, int *q);
  7.  
  8. const int ejex[8] = { -1,-2,-2,-1, 1, 2, 2, 1 },
  9.          ejey[8] = { -2,-1, 1, 2, 2, 1,-1,-2 };
  10.  
  11. int main(void)
  12. {
  13.  int tablero[N][N]; /* tablero del caballo. */
  14.  int i,j,q;
  15.  
  16.   /* inicializa el tablero a cero */
  17.  for (i = 0; i < N; i++)
  18.   for (j = 0; j < N; j++)
  19.    tablero[i][j] = 0;
  20.  
  21.   /* pone el primer movimiento */
  22.  tablero[0][0] = 1;
  23.  mover(tablero,2,0,0,&q);
  24.  
  25.  if (q) { /* hay solucion: la muestra. */
  26.    for (i = 0; i < N; i++) {
  27.      for (j = 0; j < N; j++)
  28.        printf("%3d ", tablero[i][j]);
  29.      putchar('\n');
  30.    }
  31.  }
  32.  else
  33.    printf("\nNo existe solucion\n");
  34.  
  35.  return 0;
  36. }
  37.  
  38. void mover(int tablero[][N],int i, int pos_x, int pos_y, int *q)
  39. {
  40.  int k, u, v;
  41.  
  42.  k = 0;
  43.  *q = 0;
  44.  do {
  45.    u = pos_x + ejex[k]; v = pos_y + ejey[k]; /* seleccionar candidato */
  46.    if (u >= 0 && u < N && v >= 0 && v < N) { /* esta dentro de los limites? */
  47.      if (tablero[u][v] == 0) {  /* es valido? */
  48.        tablero[u][v] = i;  /* anota el candidato */
  49.        if (i < ncuad) {  /* llega al final del recorrido? */
  50.          mover(tablero,i+1,u,v,q);
  51.          if (!*q) tablero[u][v] = 0; /* borra el candidato */
  52.        }
  53.        else *q = 1; /* hay solucion */
  54.      }
  55.    }
  56.    k++;
  57.  } while (!*q && k < 8);
  58. }

MOD: etiquetas GeSHi


Título: Re: juego del caballo
Publicado por: neskky en 4 Noviembre 2016, 21:11 pm
Prueba con esta función.

Código:
void Caballo(int tab[][N], int i, int pos_x, int pos_y, int *q) {

 int k,u,v;
 k=0;
 *q=0;
 
 do {
     u=pos_x + ejex[k];  v=pos_y + ejey[k];
     if(u>=0 && u<N && v>=0 && v< N)  {
        if (tab[u][v]==0) {
           tab[u][v]=i;
           if(i< N*N)  {
              Caballo(tab,i+1,u,v,q);
              if(!(*q)) tab[u][v]=0;
             }
           else *q=1;
         }
      }
    k++;
   } while(!(*q) && k<8);
}

también ->

Código:
void Caballo(int tab[][N], int i, int pos_x, int pos_y)  {
     int k,u,v;
     k=0;
  do{
     u=pos_x + ejex[k];  v=pos_y + ejey[k];
     if(u>=0 && u<N && v>=0 && v< N)
      {
        if (tab[u][v]==0)
         {
           tab[u][v]=i;
           if(i< N*N)
             Caballo (tab, i+1 ,u ,v);
           else
              ImprimeSol(tab);
           tab[u][v]=0;
        }
     }
     k++;
   } while(k<8);
}