Hasta ahora nos hemos movido siempre dentro de la línea recta que une la posición inicial con la final, siguiendo una secuencia única de movimientos determinada desde el principio por el primer algoritmo. Pero las reglas del juego permiten otras posibilidades, por ejemplo, que haya discos juntos de la misma paridad. Es decir, hay muchos más movimientos y posiciones (o estados) que los vistos hasta ahora. Un estado queda definido por el poste donde está cada disco. Por ejemplo, en una torre de 3 discos, BCC sería el estado en el cual el disco 1 está en B, y los discos 2 y 3 están en C. Como en cada poste los discos están ordenados, esta información es suficiente.
fig. 15
Hay en total 3n estados posibles y todos ellos son accesibles desde cualquier posición inicial. El conjunto de todos los estados y movimientos se puede representar mediante un grafo, donde los puntos representan los estados y las líneas, los movimientos (cada línea representa en realidad dos movimientos, uno en cada sentido). La más simple de las Torres de Hanoi, la de un solo disco, tiene este grafo.
fig. 16
Hay tres estados: A, B y C. Para ir del estado inicial (A) al final (C) basta un movimiento, aunque si lo preferimos podemos dar un rodeo pasando por el estado B. He representado el estado inicial de color verde y el final de rojo; el camino más corto para ir del estado inicial al final, de azul y el más largo (que aparece al pasar el puntero del ratón por encima del grafo) de morado. He aquí el grafo de la Torre de 2 discos:
fig. 17
Como antes, hay un solo camino óptimo que conduce del estado inicial al final, así como un solo camino de longitud máxima (¿pésimo?) entre ambos estados. Este camino pasa por todos los estados sin repetir ninguno. Parece lógico preguntarse si esto ocurrirá siempre. A continuación se muestra el grafo de la Torre de tres discos. Está claro que el camino más corto, el que corresponde a los algoritmos que hemos visto, coincide siempre con el lado derecho del triángulo. Sin pasar el puntero del ratón sobre el gráfico, puedes intentar encontrar el camino más largo posible que va de AAA a CCC sin pasar por ningún punto dos veces.
fig. 18
El grafo de orden n se construye a partir del de orden n−1: el grafo de orden n está formado por tres grafos de orden n−1 conectados por tres líneas correspondientes a movimientos del disco n. Parece que fue Ian Stewart el primero que describió el grafo de la Torre de Hanoi de esta forma en su libro Another Fine Math You've Got Me Into (no traducido al español). A medida que aumenta el valor de n, el grafo se parece cada vez más a un conocido fractal llamado Triángulo de Sierpinski. A continuación podemos ver el grafo para n = 4, pero esta vez se han suprimido los puntos y las etiquetas, y en cambio las líneas son de distintos colores, cada uno correspondiente a un disco.
fig. 19
El camino más largo del grafo de orden n también se construye a partir del camino más largo del grafo de orden n−1. Fijándonos en la figura 18 (con el puntero encima para desvelar el camino largo), primero hay que ir de AAA a CCA, pasando por todos los puntos del triángulo superior (un grafo de orden 2); de CCA pasamos directamente a CCB, iniciando un viaje análogo al anterior que nos lleva hasta AAB; después de ir de AAB a AAC comienza la última parte del camino, también correspondiente a un grafo de orden 2. Está claro que es posible repetir este proceso a medida que n se hace mayor. A continuación se ilustra el caso n = 4, sin etiquetar los estados.
fig. 20
Por último vamos a ver el grafo para n = 5 (esta vez sin indicación del camino corto, que como siempre coincide con el lado de la derecha). El largo camino morado que aparece al pasar por encima el puntero (son 242 pasos) forma ya una figura bastante impresionante.
fig. 21
¿Será posible diseñar un algoritmo que resuelva la Torre de Hanoi siguiendo este tortuoso camino? Después de ver en los dibujos cómo cada uno se basa en el de orden inferior podemos intuir que es posible definir también en este caso un algoritmo recursivo. Vamos a llamarlo «algoritmo pésimo».
Algoritmo pésimo para trasladar la torre 1...n del poste X al poste Z, usando como auxiliar el poste Y.
fig. 22
¿Y qué hay de un algoritmo pésimo iterativo? Pues resulta que observando una de estas «soluciones pésimas» (ver la figura 22) se descubre un «comportamiento» de los discos enormemente regular, que nos sugiere con inesperada facilidad un algoritmo iterativo. La clave está otra vez en el disco pequeño, que ahora oscila continuamente por el puzzle, visitando los tres postes. El algoritmo es el siguiente.
Normalmente se presenta la Torre de Hanoi con una posición inicial fija, pero nada impide que, al modo de otros famosos rompecabezas, como el Juego del 15 o el Cubo de Rubik, partamos de una posición aleatoria. Es como si nos dejaran en un punto cualquiera del grafo y tuviéramos que llegar a la meta (que sigue estando abajo a la derecha) por el camino más corto. El grafo de orden 3 será suficiente para ilustrarlo. Encuentra el camino desde el punto verde hasta el rojo por el camino más corto.
fig. 23
Aunque la solución es fácil, un giro de 60 grados hacia la derecha la hace parecer aún más obvia. Simplemente hay que «dejarse caer». En el siguiente dibujo, las líneas azules (una de ellas es la archiconocida solución desde la posición inicial típica) podrían representar corrientes de agua cayendo por una red de tuberías.
fig. 24
Esta forma de mirar el grafo nos ayuda también a agrupar las posiciones iniciales por distancias al objetivo. Todos los puntos que están a la misma altura están alejados de la posición final el mismo número de movimientos.
fig. 25
La conocida distancia de 2n−1 es máxima, es decir, la posición inicial típica está a la máxima distancia posible de la final.
El siguiente algoritmo recursivo resuelve de forma óptima la Torre de Hanoi desde cualquier posición inicial. Llamaremos Z al poste de destino. En la última llamada n vale 0, en cuyo caso no hay que hacer nada (no se puede hacer nada con una torre de cero discos).
Algoritmo para formar la torre 1...n en el poste Z.
Basándome en este algoritmo recursivo he podido encontrar uno iterativo bastante sencillo. Para explicarlo usaré una torre de cuatro discos en esta posición inicial.
fig. 26
El algoritmo se basa en una tabla con dos columnas y tantas filas como discos, poniendo más arriba los discos mayores.
tabla 2
Vamos a completar la tabla por filas empezando por arriba. Cada vez que aparezcan una o varias palabras enmarcadas por una línea roja de puntos se puede pulsar con el ratón encima para actualizar la tabla. Si pulsamos sobre la tabla misma volverá a quedar en blanco.
La columna de la izquierda no ofrece ninguna duda: simplemente hay que poner la letra del poste donde se encuentra el disco cuyo número figura a la izquierda. Como el disco 4 está en el poste A en la primera casilla debemos poner una A. En la segunda casilla siempre debe ir una C. En las demás filas la columna «Va a...» se completa de la siguiente forma: si los dos valores de la fila anterior coinciden, se pone el mismo; si son distintos se pone la letra que falta. En este caso, por ejemplo, como tenemos en la primera fila A y C, hay que poner B. En la fila correspondiente al disco 2 hay que poner C en ambas columnas (porque el disco 2 está en el poste C y porque el poste distinto de A y B es C). El disco 1, por fin, se encuentra en B y va a C (mismo valor que el repetido en la fila anterior).
Una vez completada la tabla podemos hacer el primer movimiento, que corresponde a la primera fila, empezando por abajo, cuyas casillas son distintas. En este caso, el primer movimiento consiste en llevar el disco 1 del poste B al C. Después de hacer cada movimiento hay que actualizar la tabla a partir de la fila implicada en el movimiento. Como el movimiento era de la última fila (disco 1) sólo hay que cambiar ésta, poniendo el valor correcto para la columna «Está en...».
Ahora la primera fila (de abajo hacia arriba) con valores desiguales es la del disco 3, así que el segundo movimiento consiste el llevar el disco 3 del poste A al poste B. Pero esta vez la actualización de la tabla afecta a todas las filas a excepción de la primera. En el siguiente a movimiento vuelve a intervenir el disco 1.
Este proceso se repite hasta que todas las casillas de la tabla contienen una C.
Aunque este algoritmo es bastante adecuado para implementarlo en una computadora, ir escribiendo y borrando en un papel queda poco efectista cuando queremos impresionar a los amigos. Un algoritmo más apropiado para este fin se basa en las siguientes ideas, algunas ya familiares. La clave está en el tercer punto.
El punto 3 se puede expresar también diciendo que el disco 1 elige sus compañías de acuerdo con estos criterios:
Y el algoritmo sería:
Determinar el primer movimiento sin tomar notas no es difícil, pero es de gran ayuda que los discos estén numerados. Para los demás movimientos es fundamental distinguir fácilmente los discos por su paridad (se impone una versión con dos colores).
Si, como se hace a veces, el puzzle se presenta sin un poste final fijo (se trata de formar la torre en cualquier poste; en el grafo equivale a encaminarse hacia el vértice más cercano) se puede usar el siguiente algoritmo (no óptimo), que aparece en la respuesta del archivo de rec.puzzles.
Después de haber resuelto el rompecabezas cambiando la posición inicial, ¿nos atrevemos a cambiar también la posición final? Realmente, un ligero cambio en el algoritmo de la tabla que vimos antes resuelve también este caso totalmente general. Basta tener en cuenta el destino de cada disco, que no será necesariamente el poste C. Al principio hay que poner en la segunda casilla el destino del disco n. Una vez colocado este disco habrá que poner el destino que le corresponda a n−1 en la cuarta casilla, etc.
Vamos a mostrarlo con el mismo ejemplo de antes, pero cambiando la posición final, que ahora será AACB. El siguiente dibujo alterna entre la posición inicial y la final si hacemos clic con el ratón sobre él.
fig. 27
tabla 3
Son necesarios los siguientes once movimientos para ir del estado inicial al final. Al pulsar con el ratón sobre cada uno de ellos se actualiza tanto la tabla como el dibujo.
Sin duda mucho más aún puede hablarse y escribirse sobre este maravilloso invento de Édouard Lucas. Y si a su idea original le introducimos variaciones, la veta puede convertirse en prácticamente inagotable. La variante más obvia puede ser la adición de postes, lo que es conocido como puzzle de Reve. También hay variantes que usan varias torres de colores distintos. Y una versión perversa (en palabras de Martin Gardner) llamada Panex.
La Torre de Hanoi es uno de los rompecabezas más populares y en Internet hay muchísimas referencias a él. He seleccionado sólo unas cuantos sitios entre los que me han parecido más interesantes o curiosos. En cualquiera de los tres primeros puedes practicar con el juego.
Rodolfo Valeiras
Última modificación: 26 de julio de 2004