Torres de Hanoi no recursivo!
Hola, tengo que hacer el algoritmo de las torres de hanoi no recursivo (lo contrario a lo de Lyla) y se supone que se usa el ciclo for pero no me corre, alguien puede ayudarme?
/*---------------------------------------------------------
|
|Este programa resuelve el problema de las Torres de Hanoi.
|
|Observacion: Antes de correr el programa colocar un Break-
|point en el return (0) del programa principal.
+--------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
/*---------------------------------------------------------
|Declaraciones de Prototipos
+--------------------------------------------------------*/
int move_torre (int n ,int from ,int to);
/*---------------------------------------------------------
|Declaraciones de Funciones
|Funcion: move_torre
|Objetivo: Mover los discos de una torre a otra.
|Variables: n - Tamaño de la torre (numero de discos).
| from - Torre incial.
| to - Torre objetivo.
| aux - Torre auxiliar.
| n_moves - Numero de movimientos.
+--------------------------------------------------------*/
int move_torre (int n, int from, int to)
{
int aux
, n_moves
;
/*---------------------------------------------------------
|En el caso de que solo se tenga un disco, se mueve de la
|torre 1 a la torre 3.
+--------------------------------------------------------*/
if (n==1)
{
printf ("Mueva el disco [1] de la torre no. %d a la torre no.%dn",
from, to);
return (1);
}
/*---------------------------------------------------------
|Ahora debemos buscar la torre pivote o auxiliar.
+--------------------------------------------------------*/
aux = 6 - from - to;
/*---------------------------------------------------------
|Ahora movemos (n-1) discos desde la posicion donde este el
disco hasta la torre auxiliar.
+--------------------------------------------------------*/
n_moves= move_torre (n-1,from, aux);
/*---------------------------------------------------------
|Imprimimos el movimiento a realizar con los discos e
|incrementados en 1 n_moves
+--------------------------------------------------------*/
printf ("Mueva el disco [%d] de la torre no. %d a la torre no.%dn"
,n, from, to);
n_moves++;
/*---------------------------------------------------------
|Ahora movemos (n-1) discos de la posición auxiliar a su
|posición final.
+--------------------------------------------------------*/
n_moves += move_torre(n-1,aux,to);
return(n_moves);
}
//---------------------------------------------------------
// CODIGO PRINCIPAL
//---------------------------------------------------------
int main ()
{
int n
, n_moves
;
/*---------------------------------------------------------
|Pedimos al usuario el número de discos.
+--------------------------------------------------------*/
do
{
printf("Introduzca el numero de Discos en la Torre: ");
scanf ("%d",&n);
} while (n<=0);
/*---------------------------------------------------------
|Movemos una torre de N discos de la primera torre a la
|tercera torre.
+--------------------------------------------------------*/
n_moves=move_torre(n,1,3);
if (n_moves<=1)
printf("La solución requiere %d movimiento.n",n_moves);
else
printf("La solución requiere %d movimientos.n",n_moves);
return(0);
}
espero que te ayude.
|
|Este programa resuelve el problema de las Torres de Hanoi.
|
|Observacion: Antes de correr el programa colocar un Break-
|point en el return (0) del programa principal.
+--------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
/*---------------------------------------------------------
|Declaraciones de Prototipos
+--------------------------------------------------------*/
int move_torre (int n ,int from ,int to);
/*---------------------------------------------------------
|Declaraciones de Funciones
|Funcion: move_torre
|Objetivo: Mover los discos de una torre a otra.
|Variables: n - Tamaño de la torre (numero de discos).
| from - Torre incial.
| to - Torre objetivo.
| aux - Torre auxiliar.
| n_moves - Numero de movimientos.
+--------------------------------------------------------*/
int move_torre (int n, int from, int to)
{
int aux
, n_moves
;
/*---------------------------------------------------------
|En el caso de que solo se tenga un disco, se mueve de la
|torre 1 a la torre 3.
+--------------------------------------------------------*/
if (n==1)
{
printf ("Mueva el disco [1] de la torre no. %d a la torre no.%dn",
from, to);
return (1);
}
/*---------------------------------------------------------
|Ahora debemos buscar la torre pivote o auxiliar.
+--------------------------------------------------------*/
aux = 6 - from - to;
/*---------------------------------------------------------
|Ahora movemos (n-1) discos desde la posicion donde este el
disco hasta la torre auxiliar.
+--------------------------------------------------------*/
n_moves= move_torre (n-1,from, aux);
/*---------------------------------------------------------
|Imprimimos el movimiento a realizar con los discos e
|incrementados en 1 n_moves
+--------------------------------------------------------*/
printf ("Mueva el disco [%d] de la torre no. %d a la torre no.%dn"
,n, from, to);
n_moves++;
/*---------------------------------------------------------
|Ahora movemos (n-1) discos de la posición auxiliar a su
|posición final.
+--------------------------------------------------------*/
n_moves += move_torre(n-1,aux,to);
return(n_moves);
}
//---------------------------------------------------------
// CODIGO PRINCIPAL
//---------------------------------------------------------
int main ()
{
int n
, n_moves
;
/*---------------------------------------------------------
|Pedimos al usuario el número de discos.
+--------------------------------------------------------*/
do
{
printf("Introduzca el numero de Discos en la Torre: ");
scanf ("%d",&n);
} while (n<=0);
/*---------------------------------------------------------
|Movemos una torre de N discos de la primera torre a la
|tercera torre.
+--------------------------------------------------------*/
n_moves=move_torre(n,1,3);
if (n_moves<=1)
printf("La solución requiere %d movimiento.n",n_moves);
else
printf("La solución requiere %d movimientos.n",n_moves);
return(0);
}
espero que te ayude.
