El algoritmo recursivo sería:
Hanoi (N , columna A, columna B , columna C)
N, origen, destino , auxiliar
Si N == 1
Imprimir : Pasar disco de A a B
else
Hanoi(N-1 , A , C, B)
Imprimir : Pasar disco de A a B
Hanoi(N-1 , C , B , A)
Veamos paso a paso como procede el algoritmo en el caso de tres discos:
Hanoi(3,1,2,3)
Hanoi(1,1,2,3) --> Cambia de 1 a 2
Hanoi(2,1,3,2) --> Cambia de 1 a 3 --> Cambia de 1 a 3
Hanoi(1,2,3,1) --> Cambia de 2 a 3
Cambia de 1 a 2 --> Cambia de 1 a 2 ---> Cambia de 1 a 2
Hanoi(1,3,1,2) --> Cambia de 3 a 1
Hanoi(2,3,2,1) --> Cambia de 3 a 2 --> Cambia de 3 a 2
Hanoi(1,1,2,3) --> Cambia de 1 a 2
FORMA RECURSIVA
hanoi ( N, origen, destino, auxiliar )
{
si N mayor a 0 entonces
hanoi(N - 1, origen, auxiliar, destino)
pasar disco N de origen a destino
hanoi(N - 1, auxiliar, destino, origen)
fin-si
}
PROGRAMACION EN JAVA
import java.io.*;
/**
* Imprime un sistema de posiciones para resolver
* las torres de hanoi tomando como referencia
* el elemento mas a la izquierda
*/
public class hanoi
{
static int moves=0; //cantidad de movimientos
static int getInt()
{
String line;
BufferedReader in =
new BufferedReader(new InputStreamReader(System.in));
try
{
line = in.readLine();
int i = Integer.valueOf(line).intValue();
return i;
}
catch (Exception e)
{
System.err.println("Digite un numero valido.\n" +
"se asume como el valor de 1");
return 1;
}
}
*/Funcion para mover disco de torre a torre*/
static void hanoi(int altura, char deTorre, char aTorre, char conTorre)
{
if (altura >= 1)
{
hanoi(altura-1, deTorre, conTorre, aTorre);
moverDisco(deTorre, aTorre);
hanoi(altura-1, conTorre, aTorre, deTorre);
}
}
/*funcion para imprimir el movimiento del disco*/
static void moverDisco(char deTorre, char aTorre)
{
moves++;
System.out.print(deTorre);
System.out.print(aTorre);
System.out.print(((moves % 20)==0) ? '\n' : ' ');
}
*/Funcion para Ingresar la cantidad de discos*/
public static void main(String[] args)
{
int AlturaTorre;
char deTorre='A', aTorre='B', conTorre='C';
System.out.println("Digite Cantidad de discos");
System.out.print("y presione Enter");
System.out.print (" ");
AlturaTorre = getInt();
hanoi(AlturaTorre, deTorre, aTorre, conTorre);
System.out.println();
}
}
martes, 24 de febrero de 2009
Suscribirse a:
Enviar comentarios (Atom)
0 comentarios:
Publicar un comentario