miércoles, 29 de septiembre de 2010

CODIGO FUENTE DE TORRES DE HANÓI EN C MEDIANTE RECURSIVIDAD


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