nuestras visitas

jueves, 12 de septiembre de 2013

Torres de Hanoi

 EL JUEGO DE LAS TORRES DE HANOI

Es un problema clásico de recursión, ya que pertenece a la clase de problemas cuya solución se simplifica notablemente al utilizar recursión.
Se tienen 3 torres y un conjunto de N discos de diferentes tamaños.
Cada uno de los mismos tiene una perforación en el centro que le permite deslizarse a cualquiera de las torres. Inicialmente, los N discos están ordenados de mayor a menor en una de las torres.
Se debe pasar los discos a otra torre, utilizando la tercera torre como auxiliar. Este movimiento debe hacerse respetando las siguientes:
1.    En cada movimiento solo puede intervenir un disco, por lo tanto siempre será el disco superior el que pueda moverse.
2.    No puede quedar un disco sobre uno de menor tamaño. Supongamos que la torre se identifica con los nombres A, B y C. Los discos están inicialmente en la torre A (origen) que se quiere transferir.     A continuación se presentara el estado inicial y el final respectivamente del problema de la torre de Hanói para tres discos. Como debe respetarse las reglas enunciadas anteriormente, la única manera de mover el disco inferior será moviendo los primeros (N-1) discos superiores. Dado de que se requiere llevar el disco inferior a la torre destino B, deben colocarse primero los (N-1) discos en la torre auxiliar C. estas operaciones pueden hacerse generalmente para todos los discos, distinguiéndose básicamente tres subtareas.
3.    Transferir (N-1) discos de la torre A, a la torre C.
4.    Mover un disco de la torre A, a la torre C.

5.    Transferir (N-1) discos de la torre C, a la torre B…



A continuación
 te presentaremos un problema ya resuelto









Problema a resolver
hacer un problema donde se demuestre el juego de torres de hanoi

Diagrama UML


Solución en JAVA

import javax.swing.JOptionPane;
public class TorresHanoi {
   
    private int numdiscos;
    private int nummovimientos;


    public int getNumdiscos() {
        return numdiscos;
    }

   
    public void setNumdiscos(int numdiscos) {
        this.numdiscos = numdiscos;
    }


    public int getNummovimientos() {
        return nummovimientos;
    }

  
    public void setNummovimientos(int nummovimientos) {
        this.nummovimientos = nummovimientos;
    }
    public void intercambio( int numdiscos,char A,char B,char C){
        
      if(numdiscos==1){
          setNummovimientos(getNummovimientos() +1);
          JOptionPane.showMessageDialog(null,"mover disco del poste A al poste B  "+"\n"+"numeros de movimientos "+nummovimientos);  
      }  
      else{
          intercambio(numdiscos-1,A,B,C);
          setNummovimientos(getNummovimientos()+1);
          JOptionPane.showMessageDialog(null,"mover disco del poste A al poste C "+"\n"+"numeros de movimientos "+nummovimientos); 
          intercambio(numdiscos-1,A,B,C);
      }
    }
    public void jugar(){
    JOptionPane.showMessageDialog(null,"el total de movimientos efectuados fueron  "+ nummovimientos);    
    }
}


public class Torres {
    public static void main(String []largs){
        
        TorresHanoi x;
        x=new TorresHanoi();
        
        x.intercambio(3, 'A' ,'B', 'C');
        x.jugar();
    }
    
}
CONCLUSIÓN
En este programa llegue ala conclusión que este juego aplica la recursion cuya solución se simplifica notablemente al utilizar recursion para mi fue el programa mas confuso pero imposible de hacer.



No hay comentarios.:

Publicar un comentario