SlideShare una empresa de Scribd logo
1 de 11
Diana Karen Calderón Martínez
José LuisValdés Farías
Lorena AcostaVillalobos
Las Torres de Hanói es un rompecabezas o juego matemático
inventado en 1883 por el matemático francés Éduard Lucas.
Según una leyenda india, en el Templo de Benarés, bajo el domo
que marca el centro del mundo, hay una placa de latón con tres
agujas de diamante. Durante la creación, Dios puso sesenta y
cuatro discos de oro puro de distinto tamaño en una de las
agujas, formando una torre.
Los bramanes llevan generaciones cambiando de lugar, uno a uno,
los discos de la torre entre las tres agujas de forma que en ningún
momento un disco mayor descanse sobre otro más pequeño. Cuando
hayan conseguido trasladar todos los discos a otra aguja su
trabajo estará terminado, y la torre y el templo se derrumbarán, y
con un gran trueno, el mundo se desvanecerá. La versión
simplificada que se vendía en Francia se componía de ocho discos
de madera.
Declaración del problema.
 Se deben mover todos los discos de una aguja a
otra.
 Sólo puede moverse un disco a la vez.
 Ningún disco de tamaño mayor puede descansar
sobre uno de menor tamaño.
El algoritmo dependerá del número de discos del problema.
• Si inicialmente se tiene un número IMPAR de discos, el
primer movimiento es colocar el disco más pequeño en la pila
destino, y en cada paso impar se le mueve a la siguiente pila a su
izquierda (o a la pila destino, si está en la pila origen).
La secuencia será DESTINO, AUXILIAR, ORIGEN, DESTINO, AUXILIAR, ORIGEN…
•Si se tiene inicialmente un número PAR de discos, el primer
movimiento debe ser colocar el disco más pequeño en la pila
auxiliar, y en cada paso impar se le mueve a la siguiente pila a su
derecha (o a la pila origen, si está en la pila destino).
La secuencia será AUXILIAR, DESTINO, ORIGEN,
AUXILIAR, DESTINO, ORIGEN,
Analizando otra vez el algoritmo recursivo y el
razonamiento que nos llevó a él podemos comprobar que
(centrándonos en el caso de 8 discos) el disco 8 se
mueve una sola vez, el 7 dos veces, el 6 cuatro veces,
etc. El disco 1 se mueve 128 veces. La suma de estas
potencias de 2 coincide con el total de movimientos
antes calculado (1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 =
255).
La cantidad de movimientos óptimos es dada por :
2N
-1
Es una técnica de
programación importante. Se
utiliza para realizar una
llamada a una función desde
la misma función.
#include <stdio.h>
#include <conio.h>
void hanoi(int n,int com, int aux, int fin);
void main(void){
clrscr();
char com='A';
char aux='B';
char fin='C';
int n;
printf("nNumero de discos: ");
scanf("%d",&n);
fflush(stdin);
printf("nnLos movimientos a realizar son:
n");
hanoi(n,com,aux,fin);
}
void hanoi(int n,int com, int aux, int fin){
if(n==1){
printf("%c->%c",com,fin);
}
else{
hanoi(n-1,com,fin,aux);
printf("n%c->%cn",com,fin);
hanoi(n-1,aux,com,fin);
getch();
return 0;
}
}
#include<conio.h>
#include<iostream.h>
#include<stdlib.h>
#include<dos.h>
#define hanoi 4
int main( )
{
int n[hanoi]={1,2,3,4},y;
char t,t2,t3;
clrscr();
for(int x=1; x<=hanoi; x++)
{
gotoxy(3,y++);
cout << n[x] << endl;
}
for(int y=0; y<15; y++)
{
for(int x=0; x<=4; x++)
{
for(int s=1; s<=3; s++)
{
cout << "Disco "
<< n[x] << " --> " << s << endl;
}
}
}
getch();
}
Referencias
http://homepage.mac.com/eravila/algoritmos.
pdf
http://www.rodoval.com/heureka/hanoi/
http://www.angelfire.com/space/leosan/torre
s.html
http://www.kernelthread.com/projects/hanoi
//

Más contenido relacionado

Similar a Las Torres de Hanói: Resolución del rompecabezas matemático

Similar a Las Torres de Hanói: Resolución del rompecabezas matemático (20)

Torres de hanoi
Torres de hanoiTorres de hanoi
Torres de hanoi
 
Torres de hanoi
Torres de hanoiTorres de hanoi
Torres de hanoi
 
Torresdehanoi javierguzman
Torresdehanoi javierguzmanTorresdehanoi javierguzman
Torresdehanoi javierguzman
 
Torres de hanoi
Torres de hanoiTorres de hanoi
Torres de hanoi
 
Torres de Hanói. Nathaly Quijada.
Torres de Hanói. Nathaly Quijada.Torres de Hanói. Nathaly Quijada.
Torres de Hanói. Nathaly Quijada.
 
Torre de hanoi
Torre de hanoiTorre de hanoi
Torre de hanoi
 
La terrible leyenda de las torres de Hanoi.pptx
La terrible leyenda de las torres de Hanoi.pptxLa terrible leyenda de las torres de Hanoi.pptx
La terrible leyenda de las torres de Hanoi.pptx
 
Torres de hanoi
Torres de hanoiTorres de hanoi
Torres de hanoi
 
Torres de Hanoi
Torres de HanoiTorres de Hanoi
Torres de Hanoi
 
Torrres de hanói
Torrres de hanóiTorrres de hanói
Torrres de hanói
 
Torres de hanoi
Torres de hanoiTorres de hanoi
Torres de hanoi
 
Torres de Hanoi.
Torres de Hanoi.Torres de Hanoi.
Torres de Hanoi.
 
Las torres de Hanoi
Las torres de HanoiLas torres de Hanoi
Las torres de Hanoi
 
Torredehanoi
TorredehanoiTorredehanoi
Torredehanoi
 
Torres de hanoi
Torres de hanoiTorres de hanoi
Torres de hanoi
 
Torres de hanoi
Torres de hanoiTorres de hanoi
Torres de hanoi
 
Las torres de hanói
Las torres de hanóiLas torres de hanói
Las torres de hanói
 
Diapositiva torre hanoi german carluccio
Diapositiva torre hanoi german carluccioDiapositiva torre hanoi german carluccio
Diapositiva torre hanoi german carluccio
 
Torres de hanói
Torres de hanóiTorres de hanói
Torres de hanói
 
LAS TORRES DE HANOI
LAS TORRES DE HANOI LAS TORRES DE HANOI
LAS TORRES DE HANOI
 

Las Torres de Hanói: Resolución del rompecabezas matemático

  • 1. Diana Karen Calderón Martínez José LuisValdés Farías Lorena AcostaVillalobos
  • 2. Las Torres de Hanói es un rompecabezas o juego matemático inventado en 1883 por el matemático francés Éduard Lucas. Según una leyenda india, en el Templo de Benarés, bajo el domo que marca el centro del mundo, hay una placa de latón con tres agujas de diamante. Durante la creación, Dios puso sesenta y cuatro discos de oro puro de distinto tamaño en una de las agujas, formando una torre.
  • 3. Los bramanes llevan generaciones cambiando de lugar, uno a uno, los discos de la torre entre las tres agujas de forma que en ningún momento un disco mayor descanse sobre otro más pequeño. Cuando hayan conseguido trasladar todos los discos a otra aguja su trabajo estará terminado, y la torre y el templo se derrumbarán, y con un gran trueno, el mundo se desvanecerá. La versión simplificada que se vendía en Francia se componía de ocho discos de madera.
  • 4. Declaración del problema.  Se deben mover todos los discos de una aguja a otra.  Sólo puede moverse un disco a la vez.  Ningún disco de tamaño mayor puede descansar sobre uno de menor tamaño.
  • 5. El algoritmo dependerá del número de discos del problema. • Si inicialmente se tiene un número IMPAR de discos, el primer movimiento es colocar el disco más pequeño en la pila destino, y en cada paso impar se le mueve a la siguiente pila a su izquierda (o a la pila destino, si está en la pila origen). La secuencia será DESTINO, AUXILIAR, ORIGEN, DESTINO, AUXILIAR, ORIGEN…
  • 6. •Si se tiene inicialmente un número PAR de discos, el primer movimiento debe ser colocar el disco más pequeño en la pila auxiliar, y en cada paso impar se le mueve a la siguiente pila a su derecha (o a la pila origen, si está en la pila destino). La secuencia será AUXILIAR, DESTINO, ORIGEN, AUXILIAR, DESTINO, ORIGEN,
  • 7. Analizando otra vez el algoritmo recursivo y el razonamiento que nos llevó a él podemos comprobar que (centrándonos en el caso de 8 discos) el disco 8 se mueve una sola vez, el 7 dos veces, el 6 cuatro veces, etc. El disco 1 se mueve 128 veces. La suma de estas potencias de 2 coincide con el total de movimientos antes calculado (1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255). La cantidad de movimientos óptimos es dada por : 2N -1
  • 8. Es una técnica de programación importante. Se utiliza para realizar una llamada a una función desde la misma función.
  • 9. #include <stdio.h> #include <conio.h> void hanoi(int n,int com, int aux, int fin); void main(void){ clrscr(); char com='A'; char aux='B'; char fin='C'; int n; printf("nNumero de discos: "); scanf("%d",&n); fflush(stdin); printf("nnLos movimientos a realizar son: n"); hanoi(n,com,aux,fin); } void hanoi(int n,int com, int aux, int fin){ if(n==1){ printf("%c->%c",com,fin); } else{ hanoi(n-1,com,fin,aux); printf("n%c->%cn",com,fin); hanoi(n-1,aux,com,fin); getch(); return 0; } }
  • 10. #include<conio.h> #include<iostream.h> #include<stdlib.h> #include<dos.h> #define hanoi 4 int main( ) { int n[hanoi]={1,2,3,4},y; char t,t2,t3; clrscr(); for(int x=1; x<=hanoi; x++) { gotoxy(3,y++); cout << n[x] << endl; } for(int y=0; y<15; y++) { for(int x=0; x<=4; x++) { for(int s=1; s<=3; s++) { cout << "Disco " << n[x] << " --> " << s << endl; } } } getch(); }