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


#include<stdio.h>
#include<time.h>
char G[][15]={
"%c[37;44m","%c[30;46m","%c[%i;%if%s",
"%3i:%02i:%02i\n"};
char V[][17]={
"2222220022222220","3133111133133111"};
int I[]={25,23,14,10,-10,-14,-23,-25};
int H[5][16],H1[5][16],M[16],M1[16];
int B[65],D[65],E[65],F[65],J[65];
int C[65][9],L[16],Kx[65],Ky[65];
int A[144],X[65],Y[65];
int Q,N,a,b,c,e,h,n,t,x,y;
time_t T;
void plasmar(int f){
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,36,"="),
printf("%3i",L[n+8]+f*(y==n+8)),
printf(G[2],27,19,4*n+5,"="),
printf(G[2],27,20,4*n+4,""),
printf("%3i\n",L[n]+f*(x==n));
}
void reloj(int f){
e=Q+f;
n=e/3600;
printf(G[2],27,1,1,"");
printf(G[3],n,(e-3600*n)/60,e%60);
if(a>t||a>49||a>47&&f>30) Q=e;
else return;
T=time(NULL);
printf(G[2],27,1,13,"max=");
printf("%i/%i ",a+1,t=a>t?a+1:t);
if(a>61) printf("Total=%i",++N);
plasmar(J[b]=a+1);
}
int main(){
F[3]=F[12]=F[28]=F[33]=F[35]=1;
T=time(NULL);
for(y=12;y--;)
for(x=12;x--;e++)
if(y<10&&y>1&&x<10&&x>1)
X[n+1]=n%8*4+4,
Y[n+1]=17-n/8*2,
Kx[n+1]=n%8,
Ky[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(x=16;x--;)
for(n=12,y=4;y--;n-=2)
H[y][x]=H[y+1][x]+V[0][x]+n,
H1[y][x]=H1[y+1][x]+V[1][x]+n;
E[64]=18;
L[1]=L[10]=64;
M[1]=M[10]=b=1;
Inicio1:
n=L[x=Kx[b]]+a;
if(n>259||n+H[M[x]][x]+H1[M1[x]+1][x]<259) goto Rutina1;
n=L[y=Ky[b]]+a;
if(n>259||n+H[M[y]][y]+H1[M1[y]+1][y]<259) goto Rutina1;
if(F[b])
if(h<4) h++;
else{
if(a>41) reloj(time(NULL)-T);
goto Rutina1;
}
D[b]=B[b];
E[++a]=c=b;
L[x]+=a;
L[y]+=a;
M1[x]++;
M1[y]++;
Rutina:
while(D[b=C[c][--D[c]]]);
if(b) goto Inicio;
if(F[c]) h--;
L[Kx[c]]-=a;
L[Ky[c]]-=a;
M1[Kx[c]]--;
M1[Ky[c]]--;
E[a--]=0;
if(c=E[a]) goto Rutina1;
return 0;
Inicio:
n=L[x=Kx[b]]+a;
if(n>259||n+H[M[x]+1][x]+H1[M1[x]][x]<259) goto Rutina;
n=L[y=Ky[b]]+a;
if(n>259||n+H[M[y]+1][y]+H1[M1[y]][y]<259) goto Rutina;
D[b]=B[b];
E[++a]=c=b;
L[x]+=a;
L[y]+=a;
M[x]++;
M[y]++;
Rutina1:
while(D[b=C[c][--D[c]]]);
if(b) goto Inicio1;
L[Kx[c]]-=a;
L[Ky[c]]-=a;
M[Kx[c]]--;
M[Ky[c]]--;
E[a--]=0;
c=E[a];
goto Rutina;
}
Comentarios sobre la versión: 2.3 (0)
No hay comentarios