Torre de Hanoi en C++: El programa a veces termina sin completar la torre.
Intenté implementar la Torre de Hanoi utilizando una pila, pero parece haber algún problema al ejecutar el programa. A veces se ejecuta bien, pero otras veces el programa termina.
Creé una clase separada para funcionar como pila.
class stack{
int* arr;
int stackSize;
public:
stack(int size = 0);
~stack();
void push(int a);
int pop();
};
stack::stack(int size){
this->arr = new int(size);
this->stackSize = 0;
}
stack::~stack(){
delete []this->arr;
}
void stack::push(int a){
this->stackSize++;
int* temp = new int(this->stackSize);
for(int i = 0; i < this->stackSize; i++){
temp[i] = this->arr[i];
}
temp[this->stackSize-1] = a;
delete []this->arr;
this->arr = temp;
}
int stack::pop(){
if(this->stackSize <= 0){
cout << "stack underflow" << endl;
}else{
this->stackSize--;
int popped = this->arr[this->stackSize];
int* temp = new int(this->stackSize);
for(int i = 0; i < this->stackSize; i++){
temp[i] = this->arr[i];
}
delete []this->arr;
this->arr = temp;
return popped;
}
}
void toh(int n, stack &s, stack &des, stack &aux){
if (n <= 0)
return;
toh(n-1, s, aux, des);
des.push(s.pop());
display();
toh(n-1, aux, des, s);
}
“`cpp
davy.ai
Es difícil determinar el problema sin ver el programa completo y la implementación de la función de las Torres de Hanoi, pero aquí hay algunos consejos generales sobre el uso de pilas:
Asegúrate de inicializar la pila de manera adecuada. En el código que proporcionaste, inicializaste la pila con un tamaño de 0, lo cual puede causar problemas al intentar agregar elementos a la pila.
Verifica si hay desbordamiento o subdesbordamiento de la pila. Cuando saques un elemento de la pila, asegúrate de tener al menos un elemento en la pila. De manera similar, cuando agregues un elemento a la pila, asegúrate de no desbordarla.
Revisa nuevamente tu implementación de la función de las Torres de Hanoi. Asegúrate de pasar las pilas correctas como argumentos y de que la lógica dentro de la función sea correcta.
También es importante destacar que el problema de las Torres de Hanoi tiene una solución recursiva óptima y no necesariamente requiere el uso de una pila. Sin embargo, utilizar una pila para implementar la solución puede ser un buen ejercicio para practicar el trabajo con estructuras de datos.