Ir al contenido principal

Hanoi.... para las masas

Un problema muy típico de lenguaje de programación es la muy conocida estructura de torres de hanoi. Es algo básico que tiene cualquier programador.

El programa trata de despertar la recursividad (recurrencia) que está en el programador para mostrarle la solución sencilla a un problema aparentemente complejo:

En suma, se tienen 3 torres con 3 anillos de diferente tamaño colocados en orden:



La idea es llevar los 3 anillos de la primera a la última torre con dos reglas muy sencillas:

- No se puede llevar varios anillos a la vez, tiene que ser de uno en uno
- El anillo que coloques en una torre debe estar obligatoriamente sobre otro más grande

El problema típico es hacer un programa que, como input=3 obtengas:

De 1 a 3
De 1 a 2
De 3 a 2

De 1 a 3

De 2 a 1
De 2 a 3
De 1 a 3

Lo partimos así porque el primer bloque es en realidad hanoi con 2 anillos llevando de torre 1 a torre 2, vamos a ponerlo: hanoi(2, t1, t2)

El tercer bloque es en realidad hanoi con 2 anillos llevando de torre 2 a torre 3: hanoi(2, t2, t3)

La solución general es entonces para n anillos de torre 1 a torre 3:

hanoi(n-1, t1, t2)
hanoi(1, t1, t3)
hanoi(n-1, t2, t3)

Aquí tienen una solución con Java, Swing y con log4j (para que vayamos creando la costumbre de hacerlo con esto). La estructura es lo más importante.

Espero lo disfrutes!!

Comentarios

Entradas más populares de este blog

Protocolos, qué son?

 En el pasado (y en el presente también) siempre he querido incluir en el contenido de la materia de estructura de datos la posibilidad de hacer un práctico que tenga que ver con redes. Este breve artículo trata de cómo se pueden conectar dos computadoras en red y de las bases por las cuales tenemos protocolos. Veremos: Significado de las direcciones IP y conceptos muy básicos de redes Cómo usar sockets para abrir canales de comnicación entre dos computadoras Concepto de un protocolo y de cómo podemos usar uno para hacer un chat básico Conceptos básicos de redes Si eres de sistemas o te interesan las computadoras pues probablemnte el concepto de conectar dos computadoras en la red parece algo tan sencillo como respirar. Sin embargo, hasta mediados de los 90 era algo que: 1) era complejo; 2) tenía atisbos de magia negra. Por suerte con el tiempo esto se ha ido masificando y ahora es algo muy sencillo. Para poder conectarnos con otra computadora debemos conocer la dirección y el puer...

Hangfire, si no lo estás usando, estás haciendo algo mal (.NET world)

Hangfire es una librería espectacular que permite encolar tareas en un servidor de tareas que funciona dentro de tu aplicación web. Existen varios tutoriales que muestran de manera bastante sencilla cómo puedes ir integrando esto a tu aplicación. En esta publicación vamos a repetir, pero en español, y sobretodo vamos a tratar de ir lo más al punto posible. Qué es? Es una librería que la cargas a través de NUGET como cualquier otra librería. En realidad tenemos que cargar 3 librerías pero eso lo veremos más adelante. Una vez que hayas cargado todo lo necesario en tu aplicación web tendrás lo siguiente: Un servidor de colas : es decir, un lugar al cual le puedes mandar hacer cosas y no se olvida de esas cosas y las va ejecutando a medida que puede o tiene tiempo. Esto es muy útil para que tu aplicación no pierda tiempo haciendo algo que no necesita realmente hacer en ese instante y devolver más rápido al usuario final. Un tablero de control de colas : una serie de ...

Con la vejez a cuestas

 La vida tiene sus etapas. Todos las conocemos, y por mucha preparación que tengamos, nunca estamos completamente listos para cada una de ellas. Y lo bonito es que cada uno de nosotros es un universo con cosas, memorias y vivencias muy particulares. Uno nunca sabe cuál es el gatillo que te enviará la bala con la cual te darás cuenta de la etapa en que estás. Algunos tienen la suerte de madurar a medida que pasa la vida y tienen estas transiciones un poco mejor programadas, aunque entiendo que el choque puede ser igual de fuerte, conciente es verdad, pero choque al fin. Otros, como su humilde escritor, tienen la desdicha que madurar cuando el árbol ya se hizo leña y está en medio del proceso de carbonizarse.  Estaba en el tradicional corte de pelo; y el peluquero, luego de la charla igual de tradicional, me acerca el espejo móvil para que, con el doble reflejo pueda ver la calidad del trabajo detrás de mi cabeza. Esta operación para mí es como cuando te dan para degustar el vin...