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
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.