¡Urgente! ! ! ¡Buscando un programa de demostración de animación en lenguaje C para la Torre de Hanoi! ! !
#include lt;graphics.hgt;
struct H
{
int data[15];/*almacenar cada nombre clave del disco */
int top; /*La altura específica de cada torre*/
}num[3] /*Tres torres*/
;void move(char x, char y, struct H num[3]); /*El proceso específico de moverse*/
void hanoi(char x, char y, char z, int n , struct H num[3]); /*recursión*/
void Init(void); /*inicialización*/
void Close(void /*cierre gráfico*); /
int computer=1; /*Banderas de control automático y control manual*/
int speed=0; /*La velocidad variable global es principalmente la velocidad del proceso de demostración. */
void main(void)
{
Init(); /*Estado inicial*/
Close(); /*Cierre gráfico* /
exit(0);
}
void Init(void)/*Inicialización*/
{
int gd=DETECT, gm;
int i, n, color;
clrscr();
printf(" ingrese n(nlt ;=10): ");/*Ingrese el número de placas que se mostrarán*/
scanf("d",&n);
printf( "Por favor ingrese 1 o 2:\n1.computadora 2.personas\n");
scanf("d",amp;i);
if(i==2 )/*Seleccionar manual El indicador de control es 0*/
computer=0;
if(nlt;1||ngt;10)
n= 10;/*Si está fuera de los límites nCuando se procesa 10*/
if(computadora)/*Si se controla automáticamente, la velocidad de entrada*/
{ p>
printf("ingrese velocidad: "); /*Ingrese velocidad*/
scanf("d", amp; velocidad
}
initgraph(amp; gd, amp; gm, "D:\\tc");
cleardevice();
for(i=0;ilt;3 ;i)
num[ i].top=-1;/*Las alturas de los tres lugares comienzan en -1*/
for(i=0;ilt;n ;i)/*Dibuja la torre inicial A La placa en la parte superior*/
{
num[0].top /*La altura de la pila se incrementa en 1*; /
num[0].data[ num[0].top]=i; /*El código de placa más grande es 0, seguido de 1, 2,...n-1*/ p>
color=num[0].data[num[0 ].top] 1; /*El código de color de la placa es el código de la placa en la parte superior de la pila más 1*/
setfillstyle(SOLID_FILL, color);
bar(100-(33-3 *num[0]
.datos[núm[0].top]), 400-20*i-8, 100
(33-3*núm[0].datos[núm[0].top]), 400 -20*i 8); /*Dibujar un rectángulo*/
}
setcolor(YELLOW);
outtextxy(180, 450, "cualquier clave continuar");
settextstyle(0, 0, 2);
outtextxy(90, 420, "A"); /*Logotipo de la torre*/
outtextxy(240, 420, "B");
outtextxy(390, 420, "C");
getch() /*Ejecutar recursividad después de recibir caracteres */
hanoi('a', 'b', 'c', n, num
}
movimiento vacío(char x, char); y, struct H num[3])/*El proceso específico de movimiento*/
{
int i;
char num1[3], num2 [3];
sprintf(num1, "c", x-32); /*Convertir minúsculas a mayúsculas y convertirlas en salida de cadena*/
sprintf(num2 , " c", y-32);
setfillstyle(SOLID_FILL, BLACK); /*Eliminar el lugar original y ennegrecerlo*/
bar(0, 0, 640, 60) ;
setcolor(RED);
outtextxy(150, 30, num1); /*Proceso de movimiento de salida*/
outtextxy(200, 30, " ---gt;");
outtextxy(310, 30, num2);
settextstyle(0, 0, 2);
setfillstyle(SOLID_FILL , BLACK); /*Eliminar el lugar original y ennegrecerlo*/
bar(100 150*(x-97)-(33-3*num[x-97].data [num[x]. -97].top]),
400-20*num[x-97].top-8, 100 150*(x-97) (33-3*
num[x-97].data[num[x-97].top]), 400-20*num[x-97].top 8);
num[y- 97].top ;/*Empuje hacia la pila, agregue 1 a la parte superior del punto objetivo*/
num[y-97].data[num[y-97].top]=num[x-97 ] .data[num[x-97].top];/*El número de código de la placa en el punto de destino es el mismo que el número de código de la placa en el punto de origen*/
num [x-97].top--;/* Pop la pila y la parte superior en el lugar original se reduce en 1*/
setfillstyle(SOLID_FILL, num[y-97].data[num [y-97].top] 1); /*El código de color de la placa es la pila Add 1*/
bar(100 150*(y-97)-(33-3*num). [y-97].data[num[y-97].top]) al código de la placa superior,
400-20*num[y-97].top-8, 100 150*( y-97)
(33-3*núm[y-97].datos [n
um[y-97].top]), 400-20*num[y-97].top 8);
if (computadora)/*Para control automático, use retardo*/
delay(speed);/*función de retardo*/
else
getch();/*Si quieres controlarlo manualmente, simplemente presiona el teclado para controlar hágalo usted mismo*/
}
void hanoi(char one, char two, char three, int n, struct H num[3])/*recursion n es el número de placas , num es la pila*/
{
if(n==1)
move(one, three, num); es 1, mueve la placa de la torre A Ve a la base de la torre C*/
else
{
hanoi(uno, tres, dos, n-1 , num);/*Mover a la base de la torre A Mover las primeras n-1 placas de la torre B*/
move(one, three, num /*Mover la enésima placa de la torre A a la torre); C*/ p>
hanoi(two, one, three, n-1, num); /*Mover n-1 placas de la Torre B a la Torre C*/
} p >
}
void Close(void)/*graph close*/
{
getch();
cerrar gráfico ();
}