ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

TORRES DE HANOI


Enviado por   •  18 de Junio de 2014  •  828 Palabras (4 Páginas)  •  413 Visitas

Página 1 de 4

Torres de Hanói

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.

Mover N discos de origen a destino

• Mover (N-1) discos de origen a auxiliar

• Mover 1 disco origen a destino

• Mover (N-1) disco de auxiliar a destino 

El diagrama de Flujo del algoritmo (N,origen,destino)

El pseudocódigo de este algoritmo es el siguiente

Hanoi (N, origen,destino)

Si N >1

Auxiliar ← TorreLibre(origen,destino)

Hanoi (N-1,origen,auxiliar)

Print “mover 1 disco de origen a destino

Hanoi(N-1,auxiliar,destino)

En caso contrario

Print “mover 1 disco de origen a destino”

Para calcular la torre auxiliar, dadas un origen y destino cualquiera sabemos que tenemos las siguientes posibilidades:

TORRES DE HANOI

ORIGEN DESTINO AUXILIAR

A B C

A C B

B A C

B C A

C A B

C B A

El diagrama de flujo para calcular la TorreLibre(origen,destino) es el siguiente:

Lo implementamos en Java con la aplicación eclipse:

package hanoi;

/**Programa para resolver el problema de las torres de Hanoi

* @author Nessy */

public class Hanoi {

/**Este método permite determinar qué torre se puede utilizar como auxiliar

* para los movimientos intermedios dadas unas torres de orígen y destino

* cualquiera

* @param origen Torre de origen de los discos.

* @param destino Torre de destino de los discos

* @param auxiliar Torre auxiliar de los discos

*/

static public char torreDisponible(char origen,char destino){

char auxiliar;

if((origen !='A')&& (destino!='A')){

auxiliar='A';

}else if ((origen !='B')&& (destino!='B')){

auxiliar='B';

}else{

auxiliar='C';

}

return auxiliar;

}

/**Resolución del problema de las Torres de Hanoi para el caso de tener n discos y unas torres de origen y destino arbitrarias

* @param n Número de discos a mover.

* @param origen Torre donde están inicialmente los discos

* @param destino Torre a la que mover los discos*/

static public void resolverHanoi(int n,char origen,char destino){

/**n es el número de discos a resolver*/

if(n>1){

char auxiliar =torreDisponible(origen,destino);

resolverHanoi((n-1),origen,auxiliar);

System.out.println("Mover disco de " + origen + " a "+ destino);

resolverHanoi((n-1),auxiliar,destino);

}else{

System.out.println("Mover disco de " + origen + " a "+ destino);

}

}

public static void main(String[] args) {

/*con esta línea compruebo que el método torreDisponible funciona correctamente

* al enviarle las torres que tengo como origen y destino*/

//System.out.println(torreDisponible('A','B'));

resolverHanoi(4,'A','C');

}

}

Vamos a introducir los cambios necesarios en el programa para que nos indique el número de movimientos realizados.

...

Descargar como (para miembros actualizados) txt (6 Kb)
Leer 3 páginas más »
Disponible sólo en Clubensayos.com