Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

Torres de hanoi

on

  • 5,929 views

Clase de Torres de Hanoi

Clase de Torres de Hanoi

Statistics

Views

Total Views
5,929
Views on SlideShare
5,731
Embed Views
198

Actions

Likes
3
Downloads
67
Comments
0

1 Embed 198

http://www.scoop.it 198

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Torres de hanoi Torres de hanoi Presentation Transcript

  • TORRES DE HANOI
    Diana Karen Calderón Martínez
    José Luis Valdés Farías
    Lorena Acosta Villalobos
  • HISTORIA
    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.
  • HISTORIA
    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,
  • LOS MOVIMIENTOS DE CADA DISCO
    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
  • RECURSIVIDAD
    Es una técnica de programación importante. Se utiliza para realizar una llamada a una función desde la misma función.
  • PSEUDOCODIGO
    #include <stdio.h>
    #include <conio.h>
    voidhanoi(intn,intcom, intaux, int fin);
    voidmain(void){
    clrscr();
    charcom='A';
    charaux='B';
    char fin='C';
    int n;
    printf(" Numero de discos: ");
    scanf("%d",&n);
    fflush(stdin);
    printf(" Losmovimientos a realizar son: ");
    hanoi(n,com,aux,fin);
    }
    voidhanoi(intn,intcom, intaux, int fin){
    if(n==1){
    printf("%c->%c",com,fin);
    }
    else{
    hanoi(n-1,com,fin,aux);
    printf(" %c->%c ",com,fin);
    hanoi(n-1,aux,com,fin);
    getch();
    return 0;
    }
    }
  • PSEUDOCODIGO
    #include<conio.h>
    #include<iostream.h>
    #include<stdlib.h>
    #include<dos.h>
    #define hanoi 4
    intmain( )
    {
    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/torres.html
    http://www.kernelthread.com/projects/hanoi//