miércoles, 8 de septiembre de 2010

TORRES DE HANOI

EN MI CLASE EXPONDRE LA TORRE DE HANOI

LAS INSTRUCCIONES DEL JUEGO SON LAS SIGUIENTES
Trata de trasladar la torre de la izquierda a la derecha de pieza en pieza, eso sí, no podrás colocar una pieza mayor sobre una menor.


SU SOLUCION:
La solución óptima se consigue en 2N - 1 movimientos. Deseamos conocer la lista de movimientos necesaria.


EL SEUDOCODIGO NOS MUESTRA EL TOTAL DE MOVIMIENTOS:
#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("\nNumero 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);
}
}

ESTE PROGRAMA NOS MUESTRA LOS MOVIMIENTOS DE CADA DISCO
#include<conio.h>

#include<iostream.h>
#include<stdlib.h>
#include<dos.h>
#define hanoi 4

int main( )
{
int n[hanoi]={1,2,3,4},y;
char t,t2,t3;
clrscr();
for(int x=1; x<=hanoi; x++)
{
gotoxy(3,y++);
cout << n[x] << endl;
}

for(int y=0; y<15; y++)


{
for(int x=0; x<=4; x++)
{
for(int s=1; s<=3; s++)
{
cout << "Disco " << n[x] << " --> " << s << endl;
}
}
}
getch();
}

EN EL PRIMER PROGRAMA SE MUESTRA LA RECURSIVIDAD, DONDE SE CREA LA FUNCION Y DESPUES LA MISMA FUNCION SE HACE LLAMAR.

3 comentarios:

  1. Excelente entrada, buena explicacion del problema de la torre de Hanoi.

    ResponderEliminar
  2. Muy bien la explicacion de la clase, y con este codigo la explicaste muy bien.

    ResponderEliminar
  3. muy bien la explicacion del problema de la torre de hanoi

    ResponderEliminar