Friday, June 24, 2005

Torre de Hanoi

#include
/* Delcaracion de funciones */
void mover_torre (int n,
char pinicial,
char pfinal,
char paux,
int dsup,
int *movs);
void mover_disco (int n,
char pinicial,
char pfinal,
int *movs);
/* Flujo de ejecucion */
int main()
{
int numero_discos, movs=0;
char poste_inicial='A', poste_final='C', poste_aux='B';
printf("\nEste algoritmo resuelve el problema de\n"
"las torres de Hanoi.\n\n");
printf("Introduzca el numero de discos: ");
scanf("%d", &numero_discos);
printf("\n");
mover_torre(numero_discos, poste_inicial, poste_final,
poste_aux, 1, &movs);
printf("\n\nFueron necesarios %d movimientos.\n", movs);
return (1);
}
/* Definicion de funciones */
/* Funcion: mover_torre (
* n - numero de discos
* pinicial - poste inicial
* pfinal - poste final
* paux - poste auxiliar
* dsup - numero de disco superior de la subtorre
* movs - puntero a contador de movimientos )
*/
void mover_torre(int n, char pinicial, char pfinal,
char paux, int dsup, int *movs)
{
/* Caso general */
if ( n != dsup ) {
mover_torre(n-1, pinicial, paux, pfinal, 1, movs);
mover_torre(n, pinicial, pfinal, paux, n, movs);
mover_torre(n-1, paux, pfinal, pinicial, 1, movs);
/* Caso base ( numero de discos == disco superior subtorre ) */
} else {
mover_disco(dsup, pinicial, pfinal, movs);
}
}
/* Funcion: mover_disco (
* n - numero de disco
* pinicial - poste inicial
* pfinal - poste final
* movs - puntero a contador de movimientos )
*/
void mover_disco(int n, char pinicial, char pfinal, int *movs)
{
printf("Muevo disco %d desde poste %c a poste %c\n",
n, pinicial, pfinal);
(*movs)++;
}

0 Comments:

Post a Comment

<< Home