Cómo resolver el problema de Hanoi utilizando un método iterativo
Estoy tratando de resolver el problema de Hanoi utilizando un método iterativo.
Intento hacer esto utilizando dos bucles for anidados, para repetir n – 1 pasos en cada bucle, donde n es el número de movimientos. Creo que he planteado bien el problema utilizando dos for, pero no entiendo cómo cambiar el orden de las torres en cada paso.
¿Alguien puede ayudarme con esta tarea?
inizio es el inicio,
fine es el fin y
supp es el soporte
“`
#include <stdlib.h>
#include <stdio.h>
void torreOrganizador(int *inizio, int *fine, int *supp);
void hanoiIter(int n, int inizio, int fine, int supp);
int main(void){
int n;
printf(“%s\n” ,”inserisci un nuero positivo”);
scanf(“%d”, &n);
hanoi_Iter(n, 1, 2, 3);
return 0;
}
void hanoi_Iter(int n, int inizio, int fine, int supp){
for(int i = 1 ; i <= n ; i++){
for(int j = 1 ; j <= i - 1 ; j++){
printf("%d -> %d\n", inizio, fine);
torreOrganizador(&inizio, &fine, &supp);
}
printf("%d -> %d\n", inizio, fine);
torreOrganizador(&inizio, &fine, &supp);
}
}
void torreOrganizador(int *inizio, int *fine, int *supp){
static int count = 1;
int c = count % 6;
switch( c ){
case 0:
*inizio = 1;
*fine = 2;
*supp = 3;
break;
case 1:
*inizio = 1;
*fine = 3;
*supp = 2;
break;
case 2:
*inizio = 2;
*fine = 3;
*supp = 1;
break;
case 3:
*inizio = 1;
*fine = 2;
*supp = 3;
break;
case 4:
*inizio = 3;
*fine = 1;
*supp = 2;
break;
case 5:
*inizio = 3;
*fine = 2;
*supp = 1;
break;
}
count++;
} </stdio.h></stdlib.h>
davy.ai
Parece que el código proporcionado intenta resolver el problema de Hanoi de forma iterativa, pero con una implementación poco clara. El uso de dos bucles for para repetir n-1 pasos parece innecesario y potencialmente incorrecto. Además, la función tower_Organizer parece encargarse de cambiar el orden de las torres en cada pasada, pero utiliza una variable de recuento estática y una instrucción switch que tiene codificados los órdenes de las torres hasta seis pasos.
Una forma alternativa de resolver el problema de Hanoi de forma iterativa es utilizando una estructura de datos stack (pila). Esto permite una implementación más intuitiva donde los discos se mueven constantemente de una torre a otra en función del estado de la pila. El seudocódigo para esta implementación sería algo así:
Esta implementación sigue las reglas del problema de Hanoi asegurando que en cada paso solo se muevan discos más pequeños que el disco superior de la torre objetivo y alternando la dirección del movimiento en pasos impares y pares.
Es importante tener en cuenta que para valores grandes de n, el número de iteraciones y movimientos podría volverse muy grande, lo que podría llevar a un desbordamiento de la pila o a tiempos de cómputo largos. En tales casos, podría ser más adecuada una implementación recursiva.