Las Torres de Hanói es un rompecabezas o juego matemático inventado en 1883 por el matemático francés Édouard Lucas. Este juego de mesa individual consiste en un número de discos perforados de radio creciente que se apilan insertándose en uno de los tres postes fijados a un tablero. El objetivo del juego es trasladar la pila a otro de los postes siguiendo ciertas reglas, como que no se puede colocar un disco más grande encima de un disco más pequeño. ( Fuente Wikipedia )
Imágenes
El código en VB.Net
El código que resuelve este problema lo encontré hace muchos (pero muchos) años en una web francesa, lo he conservado, y ahora que es el momento, lo muestro a continuación.
Module Module1 ' Esta es una variable global Dim movimientos As Integer Sub Main() Dim Nb As Integer Dim R As Char Console.WriteLine() Console.WriteLine("------------------------") Console.WriteLine("Aquí está la solución al famoso acertijo:") Console.WriteLine("(¡LAS TORRES DE HANOI!)") Console.WriteLine("------------------------") Do Console.Write("¿Cuántos discos desea resolver? :") Nb = CInt(Console.ReadLine()) HanoiRecursiva(Nb, "A"c, "B"c, "C"c) Console.WriteLine("El número de movimientos es = " & movimientos) movimientos = 0 Console.WriteLine("¿Le gustaría repetirlo otra vez? s/n") ' ' Aquí, si respondes algo, se repite el juego. ' pero si escribes no, se acaba el programa R = CChar(Console.ReadLine()) Loop Until R = "n" Or R = "N" End Sub Private Sub HanoiRecursiva( ByVal N As Integer, ByVal A As Char, ByVal B As Char, ByVal C As Char) If N = 1 Then Console.WriteLine("Desplazar el disco " & A & " = = = >> " & C) movimientos + = 1 Else ' Todo el truco esta aquí HanoiRecursiva(N - 1, A, C, B) HanoiRecursiva(1, A, B, C) HanoiRecursiva(N - 1, B, A, C) End If End Sub End Module
Un ejemplo de la solución de este código
------------------------ Aquí está la solución al famoso acertijo: (¡LAS TORRES DE HANOI!) ------------------------ ¿Cuántos discos desea resolver? :4 Desplazar el disco A ===>> B Desplazar el disco A ===>> C Desplazar el disco B ===>> C Desplazar el disco A ===>> B Desplazar el disco C ===>> A Desplazar el disco C ===>> B Desplazar el disco A ===>> B Desplazar el disco A ===>> C Desplazar el disco B ===>> C Desplazar el disco B ===>> A Desplazar el disco C ===>> A Desplazar el disco B ===>> C Desplazar el disco A ===>> B Desplazar el disco A ===>> C Desplazar el disco B ===>> C El número de movimientos es = 15 ¿Le gustaría repetirlo otra vez? s/n