El juego de las Torres de Hanoi consiste en conjunto de tres postes y n discos, con cada disco de un tamaño diferente. Llamemos a los postes A, B y C, y numeremos los discos desde 1, el disco más pequeño, hasta n, el disco más grande. Al principio, todos los discos están en el poste A, en orden de tamaño decreciente de la parte inferior a la parte superior, de modo que el disco número n está en la parte inferior y el disco número 1 está en la parte superior. Aquí está cómo se ven las Torres de Hanoi para n = 5, 5 discos:

El objetivo es pasar todos los discos del poste A al poste C siguiendo únicamente dos reglas:

1. Puedes mover solamente un disco a la vez.
2. Ningún disco puede estar encima de un disco más pequeño.

Ejercicio
Sabiendo las reglas, intenta resolver este juego utilizando 5 discos.
Juego

Para 5 discos se requieren 31 movimientos, si realizaste mas movimientos no importa es cuestion de practica resolver el juego con los movimientos exactos. Ahora bien sabiendo un poco de programación recursiva podemos elaborar un programa que realice esta tarea por nosotros.

El siguiente código en C++ ayuda a resolver una torre de Hanoi de n discos, solamente hay que ingresar el número de discos con los que se inicia el juego y seguir la secuencia que arroja el programa para encontrar la solución que requiere el menor número de movimientos.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <cstdio>

using namespace std;

void hanoi (int m, char a, char b, char c)
{
    if (m==1)
    {
        cout<<"Mueve el disco del poste "<<a<<" al poste "<<b<<"\n";
    }
    else
    {
        hanoi(m-1, a, c, b);
        cout<<"Mueve el disco del poste "<<a<<" al poste "<<b<<"\n";
        hanoi(m-1, c, b, a);
    }
}

int main ()
{
    int n;
    cout<<"Cuantos discos? ";
    cin>>n;
    hanoi (n, 'A', 'B', 'C');
    getchar();
    return 0;

}

Práctica
Programa el código y encuentra la solución a una torre de Hanoi de 6 discos. Posteriormente vuelve a intentar el juego pero esta vez siguiendo* las instrucciones que te arrojo el programa y resuélvelo con el menor número de movimientos posibles.
*Extra
Como habrás notado la secuencia es muy difícil de seguir si no eres atento a que línea del programa estas leyendo; modifica el programa para que imprima un número consecutivo detrás de cada instrucción.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *