martes, 10 de marzo de 2009

TORRES DE HANOI EN JAVA

import java.util.Stack;

class Hanoy {
// Las 3 pilas de discos
private Stack columnas[];

// Constructor, toma el nº de fichas total
public Hanoy(int fichas) {
columnas = new Stack[3];
// Inicializamos las columnas vacias
columnas[0] = new Stack();
columnas[1] = new Stack();
columnas[2] = new Stack();
// Colocamos en la primera las fichas, de mayor a menor
for (int i=fichas;i>0;i--) columnas[0].push(i);
}

// Muestra el estado actual
public void Mostrar() {
for (int i=0;i<3;i++) {
System.out.print("Col. "+i+": ");
for(int n : columnas[i]) System.out.print("["+n+"]");
System.out.println("");
}
}

// Mueve de la columna origen a la columna destino 1 disco
public void Mover(int origen, int destino) {
// Mostramos en pantalla lo que hacemos
Mostrar();
System.out.println("Movemos desde ("+origen+") hasta ("+destino+")");
System.out.println("");
// Y luego, lo hacemos, claro
columnas[destino].push(columnas[origen].pop());
}

// Mueve de la columna origen a la columna destino varios discos
public void MoverN(int origen, int destino, int cuantas) {
// Si solo es uno, se mueve sin más
if (cuantas <= 1) Mover(origen,destino);
else {
// Si son varios, entonces:
// - Primero movemos N-1 a la columna ni origen ni destino
MoverN(origen,3 - (origen+destino),cuantas-1);
// - Movemos la N, es decir, la grande
Mover(origen,destino);
// - Movemos las N-1 del primer paso, a la col. destino
MoverN(3 - (origen+destino),destino,cuantas-1);
}
}

// Programa principal
public static void main(String args[]) {
// Creamos una partida de 5 discos
Hanoy h = new Hanoy(5);
// Y la resolvemos (movemos de col.0 a col.2 los 5 discos
h.MoverN(0,2,5);
// Mostramos resultado, resuelto
h.Mostrar();
}
}

miércoles, 4 de marzo de 2009

DEFINICIONES DE LISTAS

LinkedList

Es una lista enlazada de Recipientes (nodos) donde cada uno contiene elementos (objetos, otras listas, etc) y uno o dos punteros hacia posiciones de memoria que apuntan al anterior o siguiente nodo.
Útil cuando se quiere insertar o eliminar elementos al principio o al final de la lista. No permite acceder a un elemento en concreto de la lista directamente sin recorrer antes los anteriores.

ArrayList

Es una estructura de datos de tipo Array dinámica. A diferencia de los arrays clásicos (arrays estáticos), un ArrayList permite aumentar el tamaño del vector indefinidamente (hasta lo que la memoria permita) y agregar o quitar elementos.
A diferencia de la LinkedList, la ArrayList permite acceder a cualquier elemento de la lista directamente mediante su índice, lo que la hace especialmente adecuada para búsquedas rápidas.

HashSet

Un HashSet es una estructura de datos que contiene un conjunto de objetos. Permite buscar un objeto dentro del conjunto de forma rápida y fácil. Internamente gestiona un array y guarda los objetos utilizando un índice calculado con un código hash del objeto.
- Los elementos de un HashSet no están ordenados- Para añadir un elemento al HashSet se utiliza el método add(Object obj).- Para borrar un elemento se utiliza remove(Object obj).- Para borrar todos los elementos se utiliza clear().- El tamaño del HashSet se puede obtener con la función size()

HashMap

Un HashMap permite guardar elementos, donde cada elemento es un par clave/valor. A diferencia de un array simple donde se guarda el valor en un índice en concreto, un HashMap determina el índice él mismo basándose en el valor hash (hashcode) generado a partir de la clave.

TreeSet

Un TreeSet mantiene los objetos ordenados en lo que se conoce como un red-black tree, es decir, en un árbol binario balanceado (cada padre tiene como máximo 2 hijos, y cuando se inserta una entrada se autobalancea de forma que quede un árbol binario simétrico).
Un TreeSet permite hacer búsquedas rápidas. No tanto como un HashMap, pero el TreeSet tiene la ventaja de estar ordenado por clave.

USO DE LISTAS

import java.awt.*;
import java.awt.event.*;
public class listas extends Frame
{
List lista=new List(0,true);
Label text=new Label("Maravillas que se pueden visitar en la localidad elegida");

public listas()
{

*/ esta es la super clase y lo q esta haciendo es agregar cada uno de los barrios a una lista

super("Elegir itinerario");
lista.add("Bienvenido");
lista.add("Foiano de Val Fortore");
lista.add("Baselice");
lista.add("San Bartolomeo en Galdo");
lista.add("San Marco de los Cavoti");
lista.add("Montefalcone en Val Fortore");
lista.add("Pesco Sannita");
lista.add("Colle Sannita");
lista.add("Castelvetere en Val Fortore");
lista.add("Castelfranco en Miscano");
lista.add("Ginestra de los Schiavoni");
lista.add("San Giorgio la Molara");
lista.add("Molinara");
lista.add("Pietrelcina");
lista.add("Fragneto Monforte");
lista.add("Circello");
lista.add("Campolattaro");

/*aquí esta creando el layout de la lista por decirlo de alguna manera la imagen

add(lista,BorderLayout.CENTER);
add(text,BorderLayout.SOUTH);

*/aquí crea una nueva ventana de listas

addWindowListener(new listeWindowListener());
lista.addItemListener(new escuchaLista());

*/ este es tamaños de la ventana q creamos arriba

setSize(350,100);
setResizable(false);

show();
}

*/ constructor

public static void main(String [] arg)
{
new listas();
}

*/ auqi se implementa la clase window

class listeWindowListener implements WindowListener
{

*/ las siguientes son funciones de la clase window estamos implementando entonces tenemos q crear una función q habrá la ventana y otra q la cierre

public void windowActivated(WindowEvent e)
{}
public void windowClosed(WindowEvent e)
{}
public void windowClosing(WindowEvent e)
{
String[] s=lista.getSelectedItems();
int i=0;
System.out.println("Itinerario seleccionado");

*/ aquí estamos validando si la opción escogida estaba en el itinerario

try

{
while (true){System.out.println(s[i++]);
}
}
catch (ArrayIndexOutOfBoundsException er)
{
System.out.println("Qué lo pases bien...");
}
System.exit(0);
}

*/ las siguientes funciones también son parte de la implementación de la clase window

public void windowDeactivated(WindowEvent e)
{}
public void windowDeiconified(WindowEvent e)
{}
public void windowIconified(WindowEvent e)
{}
public void windowOpened(WindowEvent e)
{}
}

*/ aquí tenemos otra clase q nos esta mostrando los ítems seleccionados

class escuchaLista implements ItemListener
{

*/ esta función se genera un evento elevento es el ítem seleccionado

public void itemStateChanged(ItemEvent e)
{
int índice=((Integer) e.getItem()).intValue();

*/ esta es una consecución de if anidados q están validando elitem q se escogió y según el ítem escogido mostrara un texto diferente

if (índice==0) text.setText("Rocca de los Rettori, arco de Trajano, anfiteatro Romano, ciudad espectáculo");
if (índice==1) text.setText("localidad San Giovanni, Campanario, via Roma, lago, fiesta S.Giovanni, fiesta del emigrante");
if (índice==2) text.setText("óasis ds San Leonardo");
if (indice==3) text.setText("casco histórico");if (índice==4) text.setText("casco histórico");
if (índice==5) text.setText("casco histórico");if (índice==6) text.setText("casco histórico");
if (índice==7) text.setText("casco histórico"); if (índice==8) text.setText("casco histórico");
if (índice==9) text.setText("Bosque"); if (índice==10) text.setText("casco histórico");
if (índice==11) text.setText("Lago de San Giorgio"); if (índice==12) text.setText("casco histórico"); if (índice==13) text.setText("Piana Romana, casco histórico, casas de Padre Pío");
if (índice==14) text.setText("Encuentro internacional de globos, Palacio Ducal");
if (índice==15) text.setText("casco histórico"); if (índice==16) text.setText("Dique de Campolattaro");
}
}
}