Prueba con esta función.
también ->
Código [Seleccionar]
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 [Seleccionar]
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);
}