Método 345-435 para las torres de Hanoi
Matemáticas, Rompecabezas Marzo 8th, 2008Tags: algoritmo, Hanoi, iterativo, no recursivo, problema
Por n-ésima petición de los lectores volveré a explicar el método 345-435 (léase “tres cuatro cinco” - “cuatro tres cinco”) para un algoritmo no recursivo de resolución del problema de las torres de Hanoi.
He aquí el algoritmo (en una especie de javascript), las bases se llaman 1, 2 y 3:
// ResolverHanoiNoRecursivo: la función principal
// N es el número de piezas
function ResolverHanoiNoRecursivo(N)
{
//Los movimientos
var arrMovimientos;
//345 si es par
//434 si es impar
if(N%2==0)
{
arrMovimientos = {3, 4, 5}; //345
}
else
{
arrMovimientos = {4, 3, 5}; //435
}
var secuencia = 0; //será 0, 1 y 2 , y vuelve a empezar 0, 1, 2
//Iteramos mientras no quede resuelto (las dos primeras bases están vacías)
while(!(Base(1) == 0 && Base(2) == 0))
{
MoverPiezas(arrMovimientos[mover]);
Mover++; //Seguimos con el siguiente movimiento
if(secuencia==3) //si es tres volvemos a empezar con el cero
secuencia=0;
}
}function Base(NBase)
{
//dice el tamaño de la pieza superior de la base NBase
//si no hay pieza devuelve 0
…
}//El meollo
funcion MoverPiezas(M)
{
var baseA, vaseB; //moveremos de la base A a la base B
if(M==3) //(1+2)
{
baseA = 1;
baseB = 2;
}
if(M==4) //(1+3)
{
baseA = 1;
baseB = 3;
}
if(M==5) //(2+3)
{
baseA = 2;
baseB = 3;
}
//La regla del juego:
//Si la base B es mayor que la A, el movimiento es de A a B
//Si la base A es mayor que la B, el movimiento es de B a A
if(Base(baseB) > Base(baseA))
{
HacerMovimiento(baseA, baseB);
}
if(Base(baseA) > Base(baseB))
{
HacerMovimiento(baseB, baseA);
}
}

Comentarios Recientes