• Martes 5 de Noviembre de 2024, 16:33

Autor Tema:  Re: Please! codigo source de TORRES DE HANOI  (Leído 8037 veces)

borca

  • Miembro activo
  • **
  • Mensajes: 60
    • Ver Perfil
Re: Please! codigo source de TORRES DE HANOI
« en: Lunes 25 de Febrero de 2002, 13:15 »
0
Si alguien tiene o sabe el codigo source del juego de torres de hanoi...porfavor haganmelo saber, lo necesitare para sacar unas ideas de codigos recursivos....torres de hanoi es el tipico juego donde hay tres torres y hay que organizar unos platos en forma creciente ;)

Avalon

  • Miembro MUY activo
  • ***
  • Mensajes: 448
    • Ver Perfil
Re: Please! codigo source de TORRES DE HANOI
« Respuesta #1 en: Lunes 25 de Febrero de 2002, 13:28 »
0
Lo puedes encontrar en:

http://www.mundoc.net/

En la sección de Archivos fuente -> Funciones matemáticas

Salu2,
Avalon

rafael

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Please! codigo source de TORRES DE HANOI
« Respuesta #2 en: Martes 26 de Febrero de 2002, 03:14 »
0
Aqui tienes un programa que soluciona el problema recursivamente.

La parte principal del programa (la que soluciona el problema) lo constituye funcion recursiva:

void torres(struct torrehanoi *fuente,struct torrehanoi *destino,struct torrehanoi *auxiliar,int numdiscos){
   if(numdiscos==1)
      moverdisco(fuente,destino);
   else{
      torres(fuente,auxiliar,destino,numdiscos-1);
      moverdisco(fuente,destino);
      torres(auxiliar,destino,fuente,numdiscos-1);
   }
}

La cual realiza los movimientos de discos de la torre 'fuente' a torre 'destino'. El parámetro 'numdiscos' es la cantidad de discos a ser movidos y 'auxiliar' es la tercera torre que interviene en este problema.

Este es el código fuente del programa.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

#include<stdio.h>

#define MAXDISCOS 50

struct torrehanoi{
   char *nombretorre;
   int discos[MAXDISCOS]; /* discos que forman la torre (discos[0]=disco de la base) */
   int cima; /* indice del disco que esta en la cima de la torre (discos[cima]=disco de la cima) */
};

void moverdisco(struct torrehanoi *fuente,struct torrehanoi *destino){
   int disco=fuente->discos[(fuente->cima)];

   /* imprime en pantalla un mensaje indicando el movimiento a efectuar */
   printf("-> disco %d de la torre %s a la torre %sn",
      disco,fuente->nombretorre,destino->nombretorre);

   /* se efectua el traslado del disco de torre a torre */
   fuente->discos[(fuente->cima)--]=0;
   destino->discos[++(destino->cima)]=disco;
}

void torres(struct torrehanoi *fuente,struct torrehanoi *destino,struct torrehanoi *auxiliar,int numdiscos){
   if(numdiscos==1)
      moverdisco(fuente,destino);
   else{
      torres(fuente,auxiliar,destino,numdiscos-1);
      moverdisco(fuente,destino);
      torres(auxiliar,destino,fuente,numdiscos-1);
   }
}

void inicializartorre(struct torrehanoi *T,char *nombretorre,int numdiscos){
   int i;

   for(i=0;i<MAXDISCOS;i++) T->discos=0;

   for(i=0;i<numdiscos;i++) T->discos=numdiscos-i;

   T->cima=numdiscos-1;

   T->nombretorre=nombretorre;
}

int main(){
   int i;
   struct torrehanoi A,B,C;
   int numdiscos=3;  /* numero de discos a utilizar */

    inicializartorre(&A,"A",numdiscos);
    inicializartorre(&B,"B",0);
    inicializartorre(&C,"C",0);

   printf("nLAS TORRES DE HANOInn");
    printf("A = FuentenC = DestinonB = Auxiliarn");
   printf("Movimientos realizados con %d discos:n",numdiscos);    

   torres(&A,&C,&B,numdiscos);

   /* muestra los discos en la torre C */
    printf("nLos discos en la torre C, desde la base, son:n");
   for(i=0;i<=C.cima;i++){
      printf("%d ",C.discos);
   }

   return 0;
}

borca

  • Miembro activo
  • **
  • Mensajes: 60
    • Ver Perfil
Re: Please! codigo source de TORRES DE HANOI
« Respuesta #3 en: Martes 26 de Febrero de 2002, 12:35 »
0
!! Gracias Avalon y rafael por las respuestas;)
pero hay algo que no comprendo bien...trabajando recursivamente en la funcion torres, la que realiza los movimientos
if(numdiscos==1)
moverdisco(fuente,destino);
else{
torres(fuente,auxiliar,destino,numdiscos-1);
moverdisco(fuente,destino);
torres(auxiliar,destino,fuente,numdiscos-1);

por que se hace un llamada de nuevo con numdiscos-1...donde se trata el disco numdisco????

chimps

  • Miembro MUY activo
  • ***
  • Mensajes: 208
    • Ver Perfil
    • http://quiqueq.blogspot.com
Please! codigo source de TORRES DE HANOI
« Respuesta #4 en: Miércoles 27 de Febrero de 2002, 14:40 »
0