AYUDA TORRE DE HANOI JAVA
Publicado por Felipe Diaz Mendoza (1 intervención) el 12/10/2016 16:25:43
Buenas necesito hacer una torre de hanoi con pilas. necesito resolver el error de StackOverflowError. PORFAVOR
Codigo HANOI.
PRUEBA DE DONDE LLAMAMOS LA FUNCION
Codigo HANOI.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package ejercicio;
/**
*PUSH= INSERTAR / PONER
* POP= EXTRAER
* @author Felipe
*/
public class Hanoi {
//atributos
Pila p1, p2, p3;
int n;
//constructor //Discos puestos en orden
public Hanoi(int n){
p1 = new Pila();
for(int i =n; i>0; i--){
p1.push(1);
}
p2= new Pila();
p3 = new Pila();
}
public Hanoi(){
n=3;
p1 = new Pila(3);
p1.push(3);
p1.push(2);
p1.push(1);
p2= new Pila();
p3 = new Pila();
}
//metodos
//mover (p1,p3)
public void mover(Pila origen, Pila destino){
//validacion
if(destino.tope!=null){ //si es que el destino es distinto de null
if(origen.tope.tamaño<destino.tope.tamaño){ //si es un movimiento valido
Nodo tmp;
tmp = origen.tope;
//destino.push(origen.tope.tamaño);
destino.push(tmp.tamaño); //traslado el tamaño
origen.pop(); //elimino el nodo
}
else{
System.out.println("Movimiento NO Valido");
}
}
else{
destino.push(origen.tope.tamaño);
origen.pop();
}
}
public void resolver(int n, Pila origen, Pila auxiliar, Pila destino){
if(p1.tope.siguiente==null){
mover(p1,p3);
System.out.println("mover disco de" + origen + "a" + destino);
}else{
resolver(n-1,origen, auxiliar, destino); //ERROR STACKOVERFLOWERROR
System.out.println("mover disco de" + n + "a" + origen + "hacia" + auxiliar);
resolver(n-1, auxiliar, origen, destino);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package ejercicio;
/**
*PUSH= AGREGAR/PONER
*POP= SALIR/EXTRAER
* @author Felipe
*/
public class Prueba {
public static void main(String [] args){
Hanoi h = new Hanoi(3);
h.resolver(h.n,h.p1, h.p2, h.p3);
System.out.println("Pila 1");
h.p1.mostrar();
}
Valora esta pregunta


0