Mediante recursividad
Este problema se suele plantear a menudo en ámbitos de programación, especialmente para explicar la recursividad. Si numeramos los discos desde 1 hasta n, y llamamos X a la primera pila de discos (origen), Z a la tercera (destino) e Y a la intermedia (auxiliar) y a la función le llamaríamos hanói (origen, auxiliar, destino), como parámetros, la función recibiría las pilas de discos. El algoritmo de la función sería el siguiente:
1. Si origen == {0}: mover el disco 1 de pila origen a la pila destino (insertarlo arriba de la pila destino); terminar.
2. Si no: hanoi({0...n-1},destino, auxiliar) //mover todas las fichas menos la más grande (n) a la varilla auxiliar
3. Mover disco n a destino //mover la ficha grande hasta la varilla final
4. Hanoi (auxiliar, origen, destino) //mover todas las fichas restantes, {0...n-1}, encima de la ficha grande (n)
5. Terminar#include <stdio.h>
#include <conio.h>
void hanoi(int n,int com, int aux, int fin);
void main(void){
clrscr();
char com='A';
char aux='B';
char fin='C';
int n;
printf("\nN£mero de discos: ");
scanf("%d",&n);
fflush(stdin);
printf("\n\nLos movimientos a realizar son: \n");
hanoi(n,com,aux,fin);
}
void hanoi(int n,int com, int aux, int fin){
if(n==1){
printf("%c->%c",com,fin);
}
else{
hanoi(n-1,com,fin,aux);
printf("\n%c->%c\n",com,fin);
hanoi(n-1,aux,com,fin);
getch();
}
}
No hay comentarios:
Publicar un comentario