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.713 visualizaciones desde el 3 de Agosto del 2023
Solucion al problema por el metodo de paso atras.


#include<stdio.h>
char G[][10]={"%c[37;44m","%c[30;46m"};
int I[]={-25,-23,-14,-10,10,14,23,25};
int C[65][9],A[144],X[65],Y[65];
int B[66],D[66],E[66],F[66],J[66];
int Kx[65],Ky[65],Lx[8],Ly[8];
int N,a,b,c,e,h,n,x,y;
void plasmar(int f){
if(f) printf("%c[1;23f%i",27,++N);
for(e=65;--e;)
if(n=E[e]) J[n]=e;
for(n=65;--n;J[n]=0)
printf(G[e=n%8?!e:e],27),
printf("%c[%i;%if",27,Y[n],X[n]),
printf(J[n]?" %2i ":" ",J[n]),
printf("%c[%i;%if ",27,Y[n]+1,X[n]);
printf("%c[0m",27);
for(n=8;n--;)
printf("%c[%i;%if",27,17-2*n,41),
printf("=%3i",Ly[n]+f*(Ky[b]==n)),
printf("%c[%i;%if=",27,19,4*n+11),
printf("%c[%i;%if",27,20,4*n+10),
printf("%3i\n",Lx[n]+f*(Kx[b]==n));
}
int main(){
F[3]=F[12]=F[28]=F[33]=F[35]=1;
for(y=12;y--;)
for(x=12;x--;e++)
if(y<10&&y>1&&x<10&&x>1)
X[n+1]=n%8*4+9,
Y[n+1]=17-n/8*2,
Kx[n+1]=n%8,
Ky[n+1]=n/8,
A[e]=++n;
while(e--)
if(y=A[e])
for(B[y]=1,x=8;x--;)
if(c=A[e+I[x]])
if(c!=18) C[y][B[y]++]=c;
for(a=y=65;--y;)
for(x=B[y];--x>1;)
if(B[e=C[y][x]]>B[n=C[y][x-1]])
C[y][x-1]=e,
C[y][x++]=n,
x+=x<B[y];
E[b=1]=18;
Lx[Kx[18]]=Ly[Ky[18]]=1;
Inicio:
if(Lx[Kx[b]]+a>261||Ly[Ky[b]]+a>261) goto Rutina;
if(F[b])
if(h<4) h++;
else{
if(a<4) plasmar(J[b]=2);
goto Rutina;
}
D[b]=B[b];
E[--a]=c=b;
Lx[Kx[b]]+=a;
Ly[Ky[b]]+=a;
if(++y>50000000) plasmar(y=0);
Rutina:
while(D[b=C[c][--D[c]]]);
if(b) goto Inicio;
if(F[c]) h--;
Lx[Kx[c]]-=a;
Ly[Ky[c]]-=a;
E[a++]=0;
if(c=E[a]) goto Rutina;
return 0;
}
No hay comentarios
1- Copiar el codigo en un archivo de texto por ejemplo "archivo.c".
2- Crear el ejecutable con "gcc -o archivo.exe archivo.c".
3- Iniciar con "archivo".