torres de hanoi
Publicado por carolina (1 intervención) el 24/07/2007 02:18:26
hola necesito saber como resolver la torres de hanoi en builder 6.0 pero con cuatro torres y 10 discos
Valora esta pregunta


0
#include <vcl.h>
#include <iostream>
#include <sstream>
#include <string>
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
using namespace std;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
// Función recursiva para resolver las Torres de Hanói
void Hanoi(int n, int origen, int destino, int auxiliar1, int auxiliar2)
{
if (n == 1)
{
// Mover el disco de la torre de origen a la torre de destino
ostringstream oss;
oss << "Mover disco 1 de la torre " << origen << " a la torre " << destino << "\r\n";
Form1->Memo1->Lines->Add(oss.str().c_str());
return;
}
// Mover n-2 discos de la torre de origen a la torre auxiliar1
Hanoi(n - 2, origen, auxiliar1, auxiliar2, destino);
// Mover el disco n-1 de la torre de origen a la torre auxiliar2
ostringstream oss;
oss << "Mover disco " << n - 1 << " de la torre " << origen << " a la torre " << auxiliar2 << "\r\n";
Form1->Memo1->Lines->Add(oss.str().c_str());
// Mover n-2 discos de la torre auxiliar1 a la torre destino
Hanoi(n - 2, auxiliar1, destino, auxiliar2, origen);
// Mover el disco n de la torre de origen a la torre auxiliar2
oss.str("");
oss << "Mover disco " << n << " de la torre " << origen << " a la torre " << auxiliar2 << "\r\n";
Form1->Memo1->Lines->Add(oss.str().c_str());
// Mover n-2 discos de la torre destino a la torre auxiliar1
Hanoi(n - 2, destino, auxiliar1, auxiliar2, origen);
// Mover el disco n-1 de la torre auxiliar2 a la torre destino
oss.str("");
oss << "Mover disco " << n - 1 << " de la torre " << auxiliar2 << " a la torre " << destino << "\r\n";
Form1->Memo1->Lines->Add(oss.str().c_str());
// Mover n-2 discos de la torre auxiliar1 a la torre destino
Hanoi(n - 2, auxiliar1, destino, auxiliar2, origen);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo1->Clear();
int numDiscos = 10;
Hanoi(numDiscos, 1, 4, 2, 3);
}