Bom galera é o minha dúvida é o seguinte, estou implementando a Torre de Hanoi em C++, e como solicitado é necessário utilizar a maneira iterativa com pilhas encadeadas e não a maneira recursiva(muito famosa), porém mesmo entendendo o conceito do hanoi e o conceito da pilha encadeada, minha dúvida estar em juntar essas duas informações e modelar meu projeto. Gostaria se vocês poderiam me ajudar como poderia ser a estrutura do programa, por exemplo preciso criar as classes como Disco, Pino, InfoDisco?(fiz assim porém estou na dúvida). Não estou pedindo código pronto, o essencial mesmo seria uma luz de como abstrair os dois conceitos e juntar no projeto.
Att
Hanoi
1 Resposta
Bom galera vou postar o que eu ja fiz
#include <Pino.h>
#include <iostream>
#include <string.h>
#include <cstring>
int main() {
Pino *pinoFonte = new Pino();
Pino *pinoMeio = new Pino();
Pino *pinoDestino = new Pino();
InfoDisco* info = new InfoDisco();
bool primeiraJogada;
int qtDisco;
double diametroDisco;
std::cout << "Digite quanto discos deseja usar? \n";
std::cin >> qtDisco;
for (int i = 0; i < qtDisco; i++) {
Disco* disco = new Disco();
std::cout << "Digite o diâmetro do disco \n";
std::cin >> diametroDisco;
disco->getInfo()->setDiametroDisco(diametroDisco);
pinoFonte->empilha(disco->getInfo());
primeiraJogada = true;
}
while (pinoFonte->getTamanho() != 0 && pinoDestino->getTamanho() != qtDisco) {
if (primeiraJogada) {
if (qtDisco % 2 != 0) {
Disco* disco = new Disco();
disco->setInfo(pinoFonte->desempilha());
disco->setOndeVeio("pinoFonte");
pinoDestino->empilha(disco->getInfo());
} else {
Disco* disco = new Disco();
disco->setInfo(pinoFonte->desempilha());
disco->setOndeVeio("pinoFonte");
pinoMeio->empilha(disco->getInfo());
}
primeiraJogada= false;
}else{
//????
}
}
}
Para a primeira jogada acredito que deva funcionar(não testei, pode estar errado, me avisem se souberem) porém para as jogadas posteriores não consigo pensar no algoritmo que obedeça essa regra " Nas outras jogadas mova o menor disco ocupando algum topo para o pino de onde ele não veio em uma jogada anterior; ". ALguem poderia me ajudar? E além disso criei um atributo chamado diametro disco para eu poder definir os tamanhos dos discos e saber qual deve ficar em cima de qual, porém mesmo com diametro não consegui entender como empilhar os discos de modo a respeitar o diametro de cada um.
Criado 20 de outubro de 2012
Ultima resposta 21 de out. de 2012
Respostas 1
Participantes 1