- Sólo se puede mover un disco cada vez.
- Un disco de mayor tamaño no puede descansar sobre uno más pequeño que él mismo.
- Sólo puedes desplazar el disco que se encuentre arriba en cada varilla.
[fuente Wikipedia]
A continuación presento una implementación de este juego en C++, usando la estructura pila.
#include <iostream>
#include <stack>
using namespace std;
void hanoi(int, stack<int>&, stack<int>&, stack<int>& );
int main(){
int n;
stack<int> origen;
stack<int> destino;
stack<int> auxiliar;
printf("Ingresa el número de discos:\n");
scanf("%d", &n);
//llenando la pila de origen con los discos
for (int i=0; i<n; i++){
cout<<endl<<n-i<<endl;
origen.push(n-i);
}
hanoi(n, origen, destino, auxiliar);
}
void hanoi(int n, stack<int> &origen, stack<int> &destino, stack<int>& auxiliar){
if (n == 1){
int top = origen.top();
destino.push(top);
origen.pop();
return;
}
else{
//{mover n-1 discos de la torre origen a la torre auxiliar}
hanoi(n-1, origen, auxiliar, destino); //{llamada recursiva}
//Mover un disco de la torre origen a la torre destino
int top = origen.top();
destino.push(top);
origen.pop();
//{mover n-1 discos de la torre auxiliar a la torre destino}
hanoi(n-1, auxiliar, destino, origen); //{llamada recursiva}
}
return;
}

