Vous êtes sur la page 1sur 2

Univ.

Huallpa Quentasi Juan Carlos 1


Torre de Hanoi- recursivo
import java.util.Scanner;
1public class Prueba {
2
3
public static void main(String[] args) {
4
Pila torre1=new Pila();
5
Pila torre2=new Pila();
6
Pila torre3=new Pila();
7
Scanner cs=new Scanner(System.in);
8
int n=cs.nextInt();
9
for(int i=n;i!=0;i--)
10
torre1.push(i);
11
Hanoi(n, torre1, torre2, torre3);
12
while(!torre3.isEmpty())
13
System.out.println(torre3.pop());
14
15
}
16
static void Hanoi(int c,Pila t1,Pila t2,Pila t3){
17
if(c==1){
18
t3.push(t1.pop());
19
}
20
else{
21
Hanoi(c-1, t1, t3, t2);
22
Hanoi(1, t1, t2, t3);
23
Hanoi(c-1, t2, t1, t3);
24
}
25
}
26
}

4,5,6.- a creacin de pilas.


9,10 .-insercin de n datos la pila 1(torre1);
11.- llamada de la funcin recursiva Hanoi donde la Torre3 es
modificada.
12, 13.-mostramos los datos de la pila 3 (Torre3);
16-25.- funcin recursiva de la torre de hanoi

Otra manera de resolver el problema, sin utilizar la recursividad, se basa en el hecho de


que para obtener la solucin ms corta, es necesario mover el disco ms pequeo en
todos los pasos impares, mientras que en los pasos pares slo existe un movimiento
posible que no lo incluye. El problema se reduce a decidir en cada paso impar a cul de
las dos pilas posibles se desplazar el disco pequeo:

El algoritmo en cuestin depende del nmero de discos del problema.

Si inicialmente se tiene un nmero impar de discos, el primer movimiento debe


ser colocar el disco ms pequeo en la pila destino, y en cada paso impar se le

Univ. Huallpa Quentasi Juan Carlos 2


Torre de Hanoi- recursivo

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

Si se tiene inicialmente un nmero par de discos, el primer movimiento debe ser


colocar el disco ms pequeo 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,

Una forma equivalente de resolverlo es la siguiente: coloreando los discos pares de un


color y los impares de otro; se resuelve el problema aadiendo la siguiente regla: no
colocar dos discos del mismo color juntos. De esta manera slo queda un movimiento
posible (adems del de volver hacia atrs).

Vous aimerez peut-être aussi