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<dos.h>
#include<stdio.h>
#include<conio.h>
char far*Q,far*q=(char far*)0xA0000000-5121;
int I[]={-25,-23,-14,-10,10,14,23,25};
int A[144],B[65],D[65],E[65],F[65];
int C[65][9],G[5][65],X[65],Y[65];
int a,b,c,d,h,x,y,N;
void casilla(int f){
Q=q+2560*Y[d]+8*X[d];
for(y=24;y--;Q+=288)
for(x=32;x--;*Q++=!*Q?f:*Q);
}
void plasmar(int f){
printf("%c[H\t TOTAL=",27);
if(N<1000) printf("%i.000",f);
else printf("%i.%03i.000",N/1000,f);
for(b=65;--b;)
gotoxy(X[d],Y[d=E[b]]),
printf("%2i",b),
casilla(b%2?1:9);
while(y=kbhit())
if(getch()==27) a=c=1;
}
int main(){
_AX=0x13;
geninterrupt(0x10);
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)
X[b+1]=b%8*4+6,
Y[b+1]=24-b/8*3,
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;G[4][y]=y<62)
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:
D[b]=B[b];
E[++a]=c=b;
if(h>4&&++y>999) plasmar(++N%1000);
Rutina:
while(D[b=C[c][--D[c]]]);
if(F[b])
if(G[h][a]) goto Rutina;
else h++;
if(b) goto Inicio;
h-=F[c];
if(c=E[--a]) goto Rutina;
if(getch()) return(0);
}
No hay comentarios