Hola a todos tengo una duda con este codigo( lenguaje c ), es de el movimiento del caballo de ajedrez, se supone que tiene que tiene que abarcar todos lo cuadros del tablero sin pasar por uno mas de una vez, solo que me repite números en el tablero, ayuda por favor
[MOD] Para publicar codigo, usar etiquetas GeShi, gracias.
Código (c) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#define ncuad n*n
#define n 8
void mover(int matriz1[][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 matriz1[n][n],i,j,q;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
matriz1[i][j]=0;
}
}
matriz1[0][0]=1;
mover(matriz1,2,0,0,&q);
printf("\n\t");
printf("Estos son los valores de la matriz \n\n");
printf("\t\t MATRIZ ORDENADA ");
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<n;j++)
{
printf("%6d", matriz1[i][j]);
}
}
printf("\n");
return 0;
}
void mover(int matriz1[][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 (matriz1[u][v] == 0) { /* es valido? */
matriz1[u][v] = i; /* anota el candidato */
if (i < ncuad) { /* llega al final del recorrido? */
mover(matriz1,i+1,u,v,q);
if (*q) matriz1[u][v] = 0; /* borra el candidato */
}
else *q = 1; /* hay solucion */
}
}
k++;
} while (!*q && k < 8);
}
[MOD] Para publicar codigo, usar etiquetas GeShi, gracias.