juego del caballo

Iniciado por jonathan1099, 31 Octubre 2016, 00:03 AM

0 Miembros y 1 Visitante están viendo este tema.

jonathan1099

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


#include <stdio.h>

#define N 7
#define ncuad N*N

void mover(int tablero[][N], int i, int pos_x, int pos_y, int *q);

const int ejex[8] = { -1,-2,-2,-1, 1, 2, 2, 1 },
          ejey[8] = { -2,-1, 1, 2, 2, 1,-1,-2 };

int main(void)
{
  int tablero[N][N]; /* tablero del caballo. */
  int i,j,q;

   /* inicializa el tablero a cero */
  for (i = 0; i < N; i++)
   for (j = 0; j < N; j++)
    tablero[i][j] = 0;

   /* pone el primer movimiento */
  tablero[0][0] = 1;
  mover(tablero,2,0,0,&q);

  if (q) { /* hay solucion: la muestra. */
    for (i = 0; i < N; i++) {
      for (j = 0; j < N; j++)
        printf("%3d ", tablero[i][j]);
      putchar('\n');
    }
  }
  else
    printf("\nNo existe solucion\n");

  return 0;
}

void mover(int tablero[][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]; /* seleccionar candidato */
    if (u >= 0 && u < N && v >= 0 && v < N) { /* esta dentro de los limites? */
      if (tablero[u][v] == 0) {  /* es valido? */
        tablero[u][v] = i;  /* anota el candidato */
        if (i < ncuad) {  /* llega al final del recorrido? */
          mover(tablero,i+1,u,v,q);
          if (!*q) tablero[u][v] = 0; /* borra el candidato */
        }
        else *q = 1; /* hay solucion */
      }
    }
    k++;
  } while (!*q && k < 8);
}


MOD: etiquetas GeSHi

neskky

#1
Prueba con esta función.

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

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);
}