TORRES DE HANOI

La Leyenda: En una ciudad antigua en la India, los monjes de un templo tienen que mover una pila de 64 discos sagrados a partir de una localización a otra. Los discos son frágiles; solamente uno se puede llevar al mismo tiempo. Un disco no se puede colocar encima de un disco más pequeño, menos valioso. Y, hay solamente otra localización en el templo (además de la original y de la localización de destino) bastante sagrada y solo una pila de discos se puede colocar allí. Así pues, los monjes comienzan a mover discos hacia adelante y hacia atrás, entre la pila original, la pila en la nueva localización, y la localización intermedia, manteniendo siempre el orden (más grande en el fondo, más pequeño en la tapa). La leyenda consiste en que, antes de que los monjes hagan el movimiento final de terminar la pila nueva en la nueva localización, el templo se convertirá en polvo y el mundo terminará. Tú que crees? .........Bueno dejémonos de leyendas y vamos a lo que vamos.......

El "Juego" torres de Hanoi consiste en tres palos, en el cual el primer palo tiene N número de argollas colocadas de tal manera que las más grandes siempre deben estar por debajo de las más pequeñas...el segundo palo le podremos llamar palo auxiliar y es el que nos ayudará de cierta manera a lograr el desarrollo del juego el cual será lograr pasar todas las argollas al tercer palo de tal manera que se mueve una argolla a la vez y que nunca una argolla grande quede encima de una pequeña....

Torre 1............... Torre 2............... Torre 3

Secuencia para tres  anillos:

Para cuatro anillos:

El Programa:

#include <iostream.h>

void torres(int i, int N, int inicio, int aux, int final)

{

if (N == 1)

cout << "Mover torre " << inicio << " a torre " << final <<endl<<endl;

else {

torres(N-1, inicio, final, aux);  //N-1 discos del poste inicial al final

cout << "Mover torre " << inicio << " a torre " << final << endl;

torres(N-1, aux, inicio, final); //N-1 discos del poste auxiliar al final

}

}

void main () {

int anillos=0;

const int poste1=1, poste2=2, poste3=3;

cout << "Número de anillos con que quiere jugar: ";

cin >> anillos;

torres(anillos, poste1, poste2, poste3);

}

Pruebas de Escritorio

Efectuadas por el estudiante Jorge Daniel Mesa:

Numero de discos: 2

 

Numero de discos: 3

·  El resultado quedaría de la siguiente manera:

Numero de discos: 4

El resultado quedaría de la siguiente manera: