Torres de hanoi

iRiBaR

Hola frikis de mv. estoy buscando un algoritmo ITERATIVO para la resolucion del problema de las torres de hanoi. Se que hay muchos en internet, pero hablan de que si n(numero discos) es par o impar, etc. y yo lo que quiero es el algoritmo en pseudolenguaje o en c++, porque lo que pone en todas las paginas es facil de sacar si te haces un ejemplito con 3 o 4 discos.

alguien lo tiene? o sabe alguna web donde pueda encontrarlo? no me digais... "busca en google" porque cmo ya he dicho arriba, ya he buscado y en todas las paginas viene lo mismo, y yo lo que quiero es una solucion en pseudocodigo o en c++. (iterativa).

gracias mv. se que no me fallareis.

elfito

uffff tengo la solucion y el algoritmo resuelto en las hojas ke te vienen con los juegos de ingenio de RBA coleccionables

pero me da pereza buscarlo :(

B

A partir de ciertos discos, ni las supercomputadoras te lo sacan, dada la complejidad de los cálculos.

Para cuántos discos lo quieres?

iRiBaR

no tengo que resolverlo, solo necesito un algoritmo (da igual para el numero de discos que sea) pues no voy a ejecutarlo ni nada, porque lo tengo que entregar en pseudolenguaje.

porfa #2 buscalo xD

mTh

#3

La gracia es que (Si no lo he entendido mal) quiere un algoritmo iterativo, que no dependa del número de discos que tengan.

EDIT: Pues leyendo #4 si que lo he entendido mal, solo quiere el algoritmo para pasarlo a pseudocodigo xD.

M0E

Siempre puedes llamar a Jane Fonda.

iRiBaR

que si que el algoritmo que necesito tiene que ser ITERATIVO.

RoDRa

en la wikipedia sale

http://es.wikipedia.org/wiki/Torres_de_Hanoi

B

Soy el único que ha entrado esperando ver rascacielos asiáticos ¿verdad?

Una FAIL para mí, por favor.

Grilla

Creo que para sacar el numero de movimientos que se necesitan para resolver lo de las torres es algo asi como

2 elevado a "n" - 1 donde "n" es el número de discos

asi es que si tenemos dos discos el numero de movimientos serían 3

si tenemso 3 discos el numero de movimientos serian 7

EDIT: ehmm... creo que no me he enterado... algoritmo? iterativo? que es eso? 0o... weno, ahi esta mi respuesta por si le sirve a alguien xD

iRiBaR

#8 ya pero lo que quiero es una ayuda con la IMPLEMENTACION. porque mira:

mientras(Fin(PaloDestino)) hacer
si (nMOD2!=0) entonces // es impar. muevo el disco + peque

  • si discopequeño esta en el palo1 lo muevo al palo 3
  • si discopequeño esta en el palo2 lo muevo al palo1
  • si discopequeño esta en el palo3 lo muevo al palo2

pero no se como implementar eso. es decir, ponerlo en forma de vectores (cada palo es un vector), asi que ese es el problema q tengo.

alguna sugerencia???

MTX_Anubis

yo lo tengo en los apuntes, o mira en cualquier libro de estructura de datos y de la información (EDI) y seguro que viene en c++, en pascal o en c o en el lenguaje que le salga del pito

por otro lado no sé por qué dices que es fácil de sacar y tú eres incapaz xD

#10 un algoritmo es un método de resolución (por ejemplo, si quieres resolver matrices supongo que siempre lo harás de la misma manera, pues usas siempre el mismo algoritmo xD). Iterativo es usando una estructura que se repite, while por ejemplo.

iRiBaR

#12 coño facil no es xD. digo que trabajando con 3 discos te das cuenta k en cada paso impar tienes k mover el disco pequeño, y en cada paso par el disco no pequeño que puedas al unico palo que puedes moverlo.

escribirlo no es dificil, pero tienes que tener en cuenta mil cosas, y eso es lo dificil.

mirare en algun libro de esos, gracias. sabes algun título en concreto?

y no me puedes escanear tu solucion?:P

BeNiTiN

#9 no eres el unico xD

Ulmo

void hanoi ( int n, char ori, char des, char aux){

if (n>0){

---- hanoi (n-1, ori, aux, des);
---- cout << ori << "=>" << des << endl;
---- hanoi (n-1, aux, des, ori);
}

}

Notese q la gracia esta en cambiar la llamada a la funcion el orden la las columnas "origen", "destino" y "auxiliar". Este algoritmo permite q una ficha salte de la primera columna a la tercera directamente, tambien existe un algoritmo más complejo para q los saltos solo puedan ser a la columna adyacente, pero supongo q no necesitaras tanto.

iRiBaR

#15 eso es recursividad, justo lo que no puedo usar xD.

no tienes el iterativo? (es muuucho mas largo)

MTX_Anubis

#16 el algoritmo que tengo es el de #15 y pasar eso a iterativo con vectores (deberías usar pilas para esto ya que sólo te importa la cima) y demás es un coñazo que no me apetece hacer xD

Mirate la wikipedia, las reglas que tiene, lapiz y papel y a pensar macho xD

nanuke

#9 & #14...me apunto xD

out2553

#9 #14 #18 otro mas a caido U_U

Diogenes

#1 usa el poder de tu corazon

iRiBaR

#17 pero esk las pilas se usan en recursividad no? lo que yo quiero es algo iterativo, y para eso no necesito ninguna pila... solo las variables que me declaro.

ya tengo algo de todas formas. gracias a todos. si alguien quiere poner su solucion, se lo sigo agradeciendo de todas formas.

Usuarios habituales

  • iRiBaR
  • out2553
  • MTX_Anubis
  • BeNiTiN
  • Grilla
  • RoDRa
  • elfito