#include stdlib.h
#define MAX 8
void mover(int tablero[][MAX], int i, int pos_x, int pos_y, int *q, int n);
void verificar(int tablero[][MAX], int n);
void inicializar(int tablero[][MAX], int n);
int ejex[8] = {2,1,-1,-2,-2,-1,1,2}; /* Vector de movimiento eje x */
int ejey[8] = {1,2,2,1,-1,-2,-2,-1}; /* Vector de movimiento eje y */
int main(void){
int tab[MAX][MAX];
int n; /* tablero del caballo. */
printf("\ningrese las dimensiones del tablero de ajedrez\n\n");
scanf("%d",&n);
inicializar(tab,n);
verificar(tab,n);
system("PAUSE");
return 0;
}
void inicializar(int tablero[][MAX], int n){
int i, j;
/* inicializa el tablero a cero */
for (i = 0; i < n; i++){
for (j = 0; j < n; j++){
tablero[i][j] = 0;
}
}
}
void verificar(int tablero[][MAX], int n){
int i,j,q;
/* pone el primer movimiento */
tablero[0][0] = 1;
mover(tablero,2,0,0,&q,n);
if (q) { /* hay solucion: la muestra. */
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++)
printf("%3d ", tablero[i][j]);
printf("\n");
}
}
else{
printf("\nNo existe solucion\n");
}
}
void mover(int tablero[][MAX],int i, int pos_x, int pos_y, int *q, int n){
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 <>= 0 && v < MAX) { /* esta dentro de los limites? */
if (tablero[u][v] == 0) { /* es valido? */
tablero[u][v] = i; /* anota el candidato */
if (i < n*n) { /* llega al final del recorrido? */
mover(tablero,i+1,u,v,q,n);
if (!*q) tablero[u][v] = 0; /* borra el candidato */
}
else *q = 1; /* hay solucion */
}
}
k++;
} while (!*q && k < 8);
}

sábado, 13 de enero de 2007
Programa que simula los movimientos del caballo en el tablero de ajedrez
Publicadas por
yueany
a la/s
11:18 p. m.
Etiquetas: Programacion
Suscribirse a:
Comentarios de la entrada (Atom)
No hay comentarios.:
Publicar un comentario