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>
#include<time.h>
char V[][9]={
"01 12123","01 10101",
"121 1232","101 1010",
"01012123","21212121",
"121 1232","101 1010",
" 1 12123"," 1 10101",
"12101232","12121212",
"01012123","21212121",
"12101232","32323232"};
char G[][12]={
"%c[37;44m","%c[30;46m","%c[%i;%if%s"};
int I[]={-25,-23,-14,-10,10,14,23,25};
int W[4][5]={19,76,135,196,259};
int B[65],D[65],E[65],F[65],J[65];
int K[65],Q[65],L[16],M[16];
int A[144],X[65],Y[65];
int C[65][9],H[65][16];
int N,a,b,c,e,h,n,x,y;
time_t T;
void plasmar(int f){
if(f) printf("%c[1;23f%i",27,++N);
else if(time(NULL)-T<20) return;
J[b]=f*=63;
T=time(NULL);
for(e=65;--e;)
if(E[e]) J[E[e]]=e;
for(n=65;--n;J[n]=0)
printf(G[e=n%8?!e:e],27),
printf(G[2],27,Y[n],X[n]," "),
printf(J[n]?"%2i ":" ",J[n]),
printf(G[2],27,Y[n]+1,X[n]," ");
printf("%c[0m",27);
for(n=8;n--;)
printf(G[2],27,17-2*n,41,"="),
printf("%3i",L[n+8]+f*(y==n+8)),
printf(G[2],27,19,4*n+10,"="),
printf(G[2],27,20,4*n+9,""),
printf("%3i\n",L[n]+f*(x==n));
}
int main(){
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,
K[n+1]=n%8,
Q[n+1]=n/8+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];
for(y=4;--y;)
for(n=0,x=5;x--;)
W[4-y][x]=W[3-y][x]+n++;
for(b=64;b--;F[b+1]=V[y][x]<48)
for(y=b/8*2,x=b%8,n=5;n--;)
H[b+1][n+3]=W[V[y][x]%8][n],
H[b+1][n+11]=W[V[y+1][x]%8][n];
E[64]=18;
L[1]=L[10]=64;
M[1]=M[10]=b=1;
Inicio:
if(L[x=K[b]]+a<H[b][M[x]]) goto Rutina;
if(L[y=Q[b]]+a<H[b][M[y]]) goto Rutina;
if(F[b])
if(h<4) h++;
else{
if(a>46) plasmar(a>61);
goto Rutina;
}
D[b]=B[b];
E[++a]=c=b;
L[x]+=a;
L[y]+=a;
M[x]++;
M[y]++;
Rutina:
while(D[b=C[c][--D[c]]]);
if(b) goto Inicio;
if(F[c]) h--;
L[K[c]]-=a;
L[Q[c]]-=a;
M[K[c]]--;
M[Q[c]]--;
E[a--]=0;
if(c=E[a]) goto Rutina;
return 0;
}
No hay comentarios