El código recursivo para solucionarlo, es bastante sencillo:
void torresHanoi(int nPiezas, Pila *ori, Pila *aux, Pila *des){ if(nPiezas == 1){ moverPieza(ori, des); }else{ torresHanoi(nPiezas-1, ori, des, aux); torresHanoi(1, ori, aux, des); torresHanio(nPiezas-1, aux, ori, des); } }No tiene mucha complicación, también podéis modificar la función, para contar el número de movimientos que se deben realizar para resolver el juego.
A continuación, os dejo los .c, .h y .exe
17 comentarios:
de donde sacaste la libreria torre
Mi profesor de C nos dio unas pistas y a medida de estas, la fui intentando hacer, hasta que di con la respuesta correcta.
Gracias por visitar el blog!
Hola necesito ayuda para entender este codigo!! se trata del juego de las torres de Hanoi!
Class Hanoi1
{
public void Hanoi(int N1, string A1, string B1, string C1)
{
int Cont = 0;
if (N1 == 1)
{
Console.WriteLine("Mover un Discos de " + A1 + " a " + C1);
Cont++;
}
else
{
Hanoi(N1 - 1, A1, C1, B1);
Console.WriteLine("Mover un Disco de " + A1 + " a " + C1);
Hanoi(N1 - 1, B1, A1, C1);
Cont++;
}
}
}
que quieres decir con la libreria torre? lo que no entiendo en la recurcion
La librería torre, es una clase que he creado yo, que es una clase con la estructura de este.
y sin utilizar pila como quedaria?
Nunca lo he hecho sin utilizar pila, sería bastante complicado, pero un método sería utilizando vectores.
me encanto el programa, ya lo baje y lo cheque, wow, estos son los motivos que me hacen sentir orgulloso de ser un futuro programador. Felicidades a la persona que elaboro el codigo :-)
Gracias de parte de un servidor
Programa perfecto!! Me encanta. Despues de darle alguna vuelta tengo implementada una función del algoritmo de las Torres de Hanoi sin utilizar pilas, utilizamos enteros.
La diferencia es que imprimimos el movimiento de los discos. Es decir:Cambiamos el disco uno de la aguja 1 a la 3 y asi sucesivamente.
void hanoi(int n,int a,int b,int c){ //Los argumentos pasados son: n=numero de discos. a=aguja a. b = aguja b. c=aguja c.
if(n>0){ //Si el numero de discos es menor de n hacer.
hanoi(n-1,a,c,b); //Llamada recursiva a la función hanoi.
printf("\nCambiamos el disco %d de la aguja %d a la %d", n, a, b);// Imprimimos el mensaje.
hanoi(n-1,c,b,a); //Llama recursiva a la función hanoi.
}
}
¿Qué os parece? Acepto sugerencias.
Para ver esta función y algunas otras en código C visitar: http://informaticatutoria.blogspot.com.es/
Un Saludo a todos.
El único problema que veo aquí es, como sabes cuantos discos (n) tienes en cada torre?
Gracias por visitar el blog
Si lo compruebas verás que funciona. Tu le pasas el número de discos a la primera llamada y lo que vas haciendo es mover siempre el último disco a otra aguja. Como puedes observar, no se colocan en la llamada a la función las agujas en el mismo orden.
Un Saludo y un Gran Blog :) Te felicito
Yo uso CodeBlocks y utilizo Linux Debian en ese caso como podría hacer ? :O
C es un lenguaje Windows, no te lo podría confirmar al 100%
Tiene un error al compilar.
C:\Documents and Settings\usuario\Escritorio\torres de hanoi\torres.h|13|warning: parameter names (without types) in function declaration|
C:\Documents and Settings\usuario\Escritorio\torres de hanoi\main.c|7|warning: return type of 'main' is not 'int'|
C:\Documents and Settings\usuario\Escritorio\torres de hanoi\main.c||In function 'main':|
C:\Documents and Settings\usuario\Escritorio\torres de hanoi\main.c|12|warning: implicit declaration of function 'getch'|
C:\Documents and Settings\usuario\Escritorio\torres de hanoi\main.o:main.c|| undefined reference to `InicioJuego'|
||=== Build finished: 1 errors, 3 warnings ===|
u,u no puedo descargar los .c y .h
Publicar un comentario