Problema Salto del Caballo.
C/Visual C
Actualizado el 14 de Octubre del 2023 por Adelino (27 códigos) (Publicado el 3 de Agosto del 2023)
6.775 visualizaciones desde el 3 de Agosto del 2023
Solucion al problema por el metodo de paso atras.


#include<stdio.h>
#include<conio.h>
int I[]={-25,-23,-14,-10,10,14,23,25};
int C[65][9],A[144];
int B[65],D[65],E[65],F[65];
int a,b,c,d,e,g,h,x,y,N;
void linea(int f){
if(g=!g) printf("%c[30;46m",27);
else printf("%c[37;44m",27);
if(f) printf(" %2i ",d);
else printf(" ");
if(!x) printf("\n");
}
void casilla(){
for(x=8;x--;linea(0));
for(x=8;x--;e++)
for(d=65;--d;)
if(e==E[d]) linea(1);
for(x=8;x--;linea(0));
e-=16;
g=!g;
}
void plasmar(int f){
e=57;
E[63]=b;
printf("%c[H",27);
for(y=9;--y;casilla());
printf("%c[0m\t\t ",27);
if(!f) printf("%i0.000",N);
else printf("%i.%02i0.000",f,N%100);
while(kbhit())
if(getch()==27) a=c=1;
}
int main(){
F[3]=F[12]=F[28]=F[33]=F[35]=1;
for(y=12;y--;)
for(x=12;x--;a++)
if(y<10&&y>1&&x<10&&x>1)
A[a]=++b;
while(a--)
if(b=A[a])
for(B[b]=1,x=8;x--;)
if(c=A[a+I[x]])
if(c!=18) C[b][B[b]++]=c;
for(y=65;--y;)
for(x=B[y];--x>1;)
if(B[a=C[y][x]]>B[b=C[y][x-1]])
C[y][x-1]=a,
C[y][x++]=b,
x+=x<B[y];
b=1;
a=y=0;
E[64]=18;
Inicio:
if(F[b])
if(h<4) h++;
else{
if(a>61&&++y>9999)
plasmar(++N/100);
goto Rutina;
}
D[b]=B[b];
E[++a]=c=b;
Rutina:
while(D[b=C[c][--D[c]]]);
if(b) goto Inicio;
if(F[c]) h--;
if(c=E[--a]) goto Rutina;
return 0;
}
No hay comentarios