You are on page 1of 4

INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA ESIME CULHUACÁN

PROBLEMA DE LAS TORRES DE HANOI

LÓPEZ BALDERAS JAVIER EDGARD ESTRUCTURAS DE DATOS MARTÍNEZ PIRO IXCHEL 3CV2

FECHA: 27/AGOSTO/2013

La resolución del juego es muy sencilla. los cuales se apilan en una de las estacas en tamaño decreciente. que se deben apilar en una de las tres estacas del tablero de juego. El objetivo del juego es acomodar esa misma pila inicial en otra de las estacas siguiendo ciertas reglas. todos ellos están apilados de mayor a menor radio en una de las estacas. 1 . En una de las estacas se apilan los discos duelen ser de madera. Un disco mayor no puede quedar en ningún momento sobre uno más pequeño que él. La historia cuenta que en un templo de la India los monjes tenían que resolver este problema pero con 64 discos. quedando las otras dos estacas vacías. como regla general se consideran ocho discos. no hay discos del mismo tamaño. el número de discos determina la complejidad de la solución. Es un juego solitario. pero por cada disco más en la torre los pasos para resolver el problema crece en forma exponencial. El tablero tradicional consiste en una base horizontal con tres estacas posicionadas verticalmente en la base y separadas una de otra. Solo se puede mover el disco que esté hasta arriba de la pila que se forme en cada estaca. Se puede mover solo una pieza por turno. 2. la leyenda dice que antes de que eso pasara el templo se haría cenizas y sacando los cálculos es seguro que así sería ya que con ese número de fichas se tendrían que hacer 1 movimiento por segundo en miles de millones de años. este juego es muy común en las ciencias de la computación y aparece en muchos libros como una introducción a la teoría de algoritmos. 3.Las torres de Hanoi son un juego que se inventó en 1883 por un matemático francés. Este juego consiste en pasar todos los discos de la estaca inicial a una de las otras considerando las tres siguientes reglas: 1. consiste en 8 discos de radios crecientes.

Los algoritmos son conjuntos ordenados y finitos de operaciones que permiten hallar la solución de algún problema. etc. luego en disco número uno se mueve al final. La clave es mover el disco más pequeño. La diferencia entre estas es que la iteración ejecuta el algoritmo completamente antes de volverlo a llamar. y este algoritmo se tratará de dar una solución en una secuencia de pasos.auxiliar) mover todas las fichas menos la más grande (n) a la estaca auxiliar. se le llama origen a la primera pila de discos.1 hanoi ({1. auxiliar a la de en medio y destino a la que sigue. todo usando la recursión en programación (funciones recursivas). Algoritmo de la función: Inicio: Entran datos: 3 Discos. 5. terminar.n-1}. se pueden clasificar de muchas maneras de acuerdo a su estructura. Si no 2. hanoi(auxiliar.2. principalmente en programación para explicar la recursividad. etc. 2 . Salida: Estaca de destino. Mover disco (n) a destino. el disco tres se coloca en la estaca auxiliar. 4.destino) mover todas las fichas restantes 1…n-1. finalmente el disco uno regresa a la estaca inicial. Utilizando la herramienta de Borland C. Se numeran los discos de uno hasta n. 1. Mover disco 1 de A a Destino 1. Estaca inicial. Con este algoritmo también se pueden calcular el número de movimientos mínimos a realizar para resolver el problema: 2n – 1. Si origen es igual a A entonces: 1. auxiliar y destino como parámetros. construcción. Este problema se suele plantear en cursos de computación.destino.origen. encima de la ficha grande. Terminar 2. se hace una función que se llame hanoi con origen. siendo n el número de discos. 3. el disco dos se debe mover por regla a la estaca final. La recursión como la iteración buscan que el algoritmo se ejecute en forma secuencial y consecutiva en un cierto número de veces. mientras que la recursión llama al mismo algoritmo para poder resolverlo.…. el movimiento inicial de este es hacia la estaca auxiliar.1.Una de las formas de resolver el problema se basa en el disco más pequeño.

A. cout<<"\n\n\n". cin>>iDiscos.h> #include <math. cout<<"\n\n\nEl problema con "<<iDiscos<<" discos.char A.iDiscos)-1<<" movimientos.#include <iostream> #include <conio. cin>>iSalir. www.A). } } main() { int iDiscos.char B) { if(iNumeroDiscos==1) { cout<<"Mover el disco "<<iNumeroDiscos<<" de "<<A<<" hasta "<<C<<endl. cout<<"\n\n\nIngrese el numero de discos con los que va a jugar y presione [ENTER]: ". se resuelve minimo en "<<pow(2. hanoi(iDiscos. pero toman más tiempo de computación Bibliografía: Estructura de datos 3ra edición. clrscr().com. }while(iSalir==1).B.'C'. \n\n\n"<<endl.B.B.h> void hanoi(int iNumeroDiscos.'B'). iSalir. Silvia Guardati. cout<<"\t\t Grupo: 3CV2 \n\n"<<endl. cout<<"Mover el disco "<<iNumeroDiscos<<" de "<<A<<" hasta "<<C<<endl. McGrawHill Osvaldo Cairó. hanoi(iNumeroDiscos-1.Wikipedia. do { cout<<"ESTE PROGRAMA RESUELVE EL PROBLEMA DE LAS TORRES DE HANOI USANDO 3 ESTACAS"<<endl. cout<<"\t\t Alumno: LOPEZ BALDERAS JAVIER EDGARD \n\n"<<endl.C. cout<<"\n\t ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA \n\n"<<endl. cout<<"\n\nEl pograma ha terminado presione 1 para continuar o 2 para salir: ". char A. 3 . } Conclusiones personales: Al comparar los códigos de este mismo problema pero iterativos se puede observar que un algoritmo recursivo es más simple (requieren menos líneas de código) que los iterativos. getch(). } else { hanoi(iNumeroDiscos-1.C.'A'.C). cout<<"\t\t Profesora: MARTINEZ PIRO IXCHEL \n\n"<<endl. cout<<"\t\t Materia: ESTRUCTURA DE DATOS \n\n"<<endl.char C.