El documento describe el rompecabezas de las Torres de Hanói, donde discos de diferentes tamaños deben ser movidos de una torre a otra siguiendo reglas específicas. Luego presenta el código de un programa en Java que implementa este rompecabezas usando pilas para representar las torres y movimientos recursivos para resolverlo.
serenidad APP presentacion.pdfes una innovadora aplicación móvil diseñada par...
La torre de hanoi segundo lab
1. LA TORRE DE HANOI
Las Torres de Hanói es un rompecabezas o juego matemático inventado en 1883
por el matemático francés Éduard Lucas. Este solitario se trata de un juego de
ocho discos de radio creciente que se apilan insertándose en una de las tres
estacas de un tablero. El objetivo del juego es crear la pila en otra de las estacas
siguiendo unas ciertas reglas. El problema es muy conocido en la ciencia de la
computación y aparece en muchos libros de texto como introducción a la teoría
de algoritmos.
CODIGO DE (MAIN)
package TORRE;
import TipoPila.pila;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
public class principal {
public static void main(String[] args) throws Exception {
//creacion las tres torres
pila torre1 = new pila();
pila torre2 = new pila();
pila torre3 = new pila();
torre1.llenar();
torr (5, torre1, torre2, torre3);
while(!torre3.pilaVacia())
torre3.imprimePila();
}
// metodo hanoi donde recibe los cuatro parametros
static void torr (int dis,pila t1,pila t2,pila t3) throws Exception{
if(dis==1){
t3.insertar(t1.quitar());
}
// recursividad
else{
torr(dis-1, t1, t3, t2);
torr(1, t1, t2, t3);
torr (dis-1, t2, t1, t3);
}
}
}
2. CODIGO DE LA (CLASE)
package TipoPila;
public class pila {
private int TAMPILA = 5;
private int cima;
private final int[] listaPila;
// el siguiente metodo es el constructor de la clase,ayuda en la
inicializacion
// de la misma
public pila() {
//estado inicial de la pila
cima= -1;
listaPila= new int[TAMPILA];
}
//Operaciones que modifican la pila
public void insertar(int elemento) throws Exception{
if (pilaLlena()){
throw new Exception("Desbordamiento de la Pila");
}
cima++;
listaPila[cima]=elemento;
}
public int quitar() throws Exception{
int aux;
if (pilaVacia()){
throw new Exception("Pila Vacia");
}
//Guarda el elemento de la cima
aux=listaPila[cima];
//decrementa el elemento de la cima y devuelve el
elemento
cima--;
return aux;
}
public int cimaPila() throws Exception{
if (pilaVacia()){
throw new Exception("Pila Vacia no hay elementos");
}
return listaPila[cima];
3. }
//Metodos para verificacion del estado de la pila---
public boolean pilaVacia(){
return cima == -1;
}
public boolean pilaLlena(){
return cima == TAMPILA -1;
}
public void limpiarPila(){
cima = -1;
}
// impresion [salida]
public void imprimePila(){
int a = 0;
try {
while (!pilaVacia()){
a=quitar();
System.out.println(a+ " ");
}
}catch (Exception e){
System.out.print("Excepcion :" + e);
}
}
// llenado de la pila para mostrarla
public void llenar(){
int ct=11;
for(int j = 1; j<=5; j++){
cima++;
listaPila[cima]= ct-1;
ct=ct-2;
}
}
}