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 H[]={0,0,0,19,76,135,196,259};
int B[65],D[65],E[65],F[65],J[65];
int X[65],Y[65],Kx[65],Ky[65];
int Lx[8],Ly[8],Mx[8],My[8];
int C[65][9],A[144];
int N,a,b,c,e,g,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*(y==n)),
printf("%c[%i;%if=",27,19,4*n+10),
printf("%c[%i;%if",27,20,4*n+9),
printf("%3i\n",Lx[n]+f*(x==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(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[64]=18;
Lx[x=Kx[18]]=Ly[y=Ky[18]]=64;
Mx[x]=My[y]=b=1;
Inicio:
if(Lx[x=Kx[b]]+a<H[Mx[x]]) goto Rutina;
if(Ly[y=Ky[b]]+a<H[My[y]]) goto Rutina;
if(F[b])
if(h<4) h++;
else{
if(a>61) plasmar(J[b]=63);
goto Rutina;
}
D[b]=B[b];
E[++a]=c=b;
Lx[x]+=a;
Ly[y]+=a;
Mx[x]++;
My[y]++;
if(++g>50000000) plasmar(g=0);
Rutina:
while(D[b=C[c][--D[c]]]);
if(b) goto Inicio;
if(F[c]) h--;
Lx[x=Kx[c]]-=a;
Ly[y=Ky[c]]-=a;
Mx[x]--;
My[y]--;
E[a--]=0;
if(c=E[a]) goto Rutina;
return 0;
}
Comentarios sobre la versión: 2.0 (0)
No hay comentarios