Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ejemplo Torres de Hanoi
Ejemplo Torres de Hanoi
Mover disco n de A a
C
TORRES DE HANOI
DESTIN AUXILIA
ORIGEN
O R
A B C
A C B
B A C
B C A
C A B
C B A
package hanoi;
/**Programa para resolver el problema de las torres de Hanoi
* @author Nessy */
public class Hanoi {
/**Este mtodo permite determinar qu torre se puede utilizar
como auxiliar
* para los movimientos intermedios dadas unas torres de orgen
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;
}
/**Resolucin del problema de las Torres de Hanoi para el caso
de tener n discos y unas torres de origen y destino arbitrarias
* @param n Nmero de discos a mover.
* @param origen Torre donde estn 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 nmero 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 lnea compruebo que el mtodo torreDisponible
funciona correctamente
* al enviarle las torres que tengo como origen y destino*/
//System.out.println(torreDisponible('A','B'));
resolverHanoi(4,'A','C');
}
}
EJEMPLO
TORRES DE HANOI METODOLOGIA
JAVA ~6~
MEJORA Vamos a introducir los cambios necesarios en el programa (en el
main) para poder enviarle el nmero de discos por consola:
Java hanoi.Hanoi 2
EJEMPLO
TORRES DE HANOI METODOLOGIA
JAVA ~7~
MEJORA Vamos a introducir los cambios necesarios en el programa para
que nos indique el nmero de movimientos realizados. De este modo queda
el cdigo como sigue:
package hanoi;
/**Programa para resolver el problema de las torres de Hanoi
* @author Nessy */
public class Hanoi {
static int movimientos=0;
/**Este mtodo permite determinar qu torre se puede utilizar
como auxiliar para los movimientos intermedios dadas unas torres de
orgen 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;
}