RE:Recorrido del caballo en un ajedrez en prolog
Publicado por
manuel_vzla (1 intervención) el 17/03/2012 02:27:08
#include<stdio.h>
#define N 8
#define ncuad N*N
void mover(int tablero[][N],int i,int pos_x,int pos_y,int *q);
int ejex[8]={2,1,-1,-2,-2,-1,1,2};
int ejey[8]={1,2,2,1,-1,-2,-2,-1};
int heuristic[8][8]={{2,3,4,4,4,4,3,2},
{3,4,6,6,6,6,4,3},
{4,6,8,8,8,8,6,4},
{4,6,8,8,8,8,6,4},
{4,6,8,8,8,8,6,4},
{4,6,8,8,8,8,6,4},
{3,4,6,6,6,6,4,3},
{2,3,4,4,4,4,3,2}
};
int main(void)
{
int tablero[N][N];/*tablero de ajedrez*/
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) {
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");
}
void mover(int tablero[][N],int i,int pos_x,int pos_y,int *q)
{
int k,u,v;
int menor=9;
// int num;
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;
if(i<ncuad) { /*llega al final del recorrido*/
mover(tablero,i+1,u,v,q);
if(!*q) tablero[u][v]=0;
}
else
*q=1;/*hay solucion*/
}
}
k++;
}while(!*q && k<8);
}