sábado, 14 de septiembre de 2013

TORRES DE HANOI

TORRES DE HANOI.


Son uno de los problemas clásicos con los que todo científico computacional en ciernes tiene que lidiar. Cuenta la leyenda que un templo del Lejano Oriente, los sacerdotes intentan mover una pila de discos dorados, de una aguja de diamante a otra. La pila inicial tiene 64 discos insertados en una aguja y se ordenan de abajo hacia arriba, de mayor a menor tamaño. Los sacerdotes intentan mover la pila de una aguja a otra, con las restricciones de que solo se puede mover un disco a la vez, y en ningún momento se puede colocar un disco más grande encima de uno más pequeño. Se cuenta con tres agujas, una de las cuales se usa para almacenar discos temporalmente. Se supone que el mundo acabara cuando los sacerdotes completen sus tareas, por lo que hay pocos incentivos para que nosotros podamos facilitar sus esfuerzos.
Supongamos que los sacerdotes intentan mover los discos de la aguja 1 a la aguja 2. Deseamos desarrollar un algoritmo que imprima la secuencia precisa de transferencia de los discos de una aguja a otra.

Si tratamos de encontrar una solución iterativa, es probable que terminemos “atados” manejando los discos sin esperanza. En vez de ello, si atacamos este problema mediante la recursividad podemos producir podemos producir rápidamente una solución.


   PROCESO:

import javax.swing.JOptionPane;
public class TorredeHanoi 
{
  private int numDiscos;
    private int numMovimientos;

    /**
     * @return the numDiscos
     */
    public int getNumDiscos() {
        return numDiscos;
    }

    /**
     * @param numDiscos the numDiscos to set
     */
    public void setNumDiscos(int numDiscos) {
        this.numDiscos = numDiscos;
    }

    /**
     * @return the numMovimientos
     */
    public int getNumMovimientos() {
        return numMovimientos;
    }

    /**
     * @param numMovimientos the numMovimientos to set
     */
    public void setNumMovimientos(int numMovimientos) {
        this.numMovimientos = numMovimientos;
    }
    public void captura()
        {
       numDiscos=Integer.parseInt(JOptionPane.showInputDialog(" *-Numero de discos:"));

        }
    public void intercambio(int numDiscos, int A,int B,int C)
    {
     if (numDiscos==1)
      {
      setNumMovimientos(getNumMovimientos() +1);
      JOptionPane.showMessageDialog(null, "*-Mover disco del poste A al poste B-*");
      }
     else
       {
    intercambio(numDiscos - 1, A,C,B);
    setNumMovimientos(getNumMovimientos() +1);
    JOptionPane.showMessageDialog(null, "*-Mover disco del poste A al poste C-*");
    intercambio(numDiscos-1, B,A,C);
       }
    }
    public void totalMovimientos()
       {
        JOptionPane.showMessageDialog(null, "*-El total de movimientos fueron:  "+ numMovimientos);
       }
}

SOLUCIÓN:

public class SolucionTorresdeHanoi
{
public static void main (String [] args)
  {
    TorredeHanoi objeto;

    objeto=new TorredeHanoi ();

    objeto.captura();
    objeto.intercambio(objeto.getNumDiscos(), 'A', 'B', 'C');
    objeto.totalMovimientos();
  }
}









No hay comentarios:

Publicar un comentario