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.
Excelente entrada, buena explicacion del problema de la torre de Hanoi.
ResponderEliminarMuy bien la explicacion de la clase, y con este codigo la explicaste muy bien.
ResponderEliminarmuy bien la explicacion del problema de la torre de hanoi
ResponderEliminar