Escolar Documentos
Profissional Documentos
Cultura Documentos
resolucin del problema (ms sencillo) de mover n-1 discos. El siguiente procedimiento
muestra la solucin imprimiendo una serie de lineas que indican el disco que hay que
mover en cada momento (se supone que los postes se identifican por un carcter):
procedure Hanoi3(N: integer; Orig,Dest,Aux: char);
begin
if N = 1 then
writeln(output,Orig,' -> ',Dest)
else
begin
Hanoi3(N-1,Orig,Aux,Dest);
writeln(output,Orig,' -> ',Dest);
Hanoi3(N-1,Aux,Dest,Orig)
end
end;
public static void hanoi(int cantidad, char torre_inicio, char torre_ayuda, char torre_desti
no){
if(cantidad == 1) // caso base en el que solo hay un disco para mover
System.out.println("Mover de " + torre_inicio + " a " + torre_destino );
else{
hanoi(cantidad-1, torre_inicio, torre_destino, torre_ayuda); // movemos todos los
discos menos el de abajo hacia la torre de ayuda
System.out.println("Mover de " + torre_inicio + " a " + torre_destino ); //movemos
el disco restante
hanoi(cantidad-1, torre_ayuda, torre_inicio, torre_destino); //movemos el resto d
e discos desde la torre de ayuda a la torre de destino
}
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();
}
3
4
initTowers();
9
10
11
12
if(n === 1)
13
mov(ori, des);
14
else {
15
16
17
mov(ori, des);
18
19
20
21
22
23
24
des.push(ori.pop());
25
26
function initTowers() {
27
28
tower1.push(n - i);
29
30
function show() {
31
console.log(tower1);
32
console.log(tower2);
33
console.log(tower3);
34
console.log();
35