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();
}
}




