Trabalho Final de Estrutura de Dados

De Aulas

Voltar para Estrutura de Dados

Problema: Torre de Hanoi

Existem várias lendas a respeito da origem do jogo, a mais conhecida diz respeito a um templo Hindu, situado no centro do universo. Diz-se que Brahma supostamente havia criado uma torre com 64 discos de ouro e mais duas estacas equilibradas sobre uma plataforma. Brahma ordenara-lhes que movessem todos os discos de uma estaca para outra segundo as suas instruções. As regras eram simples: apenas um disco poderia ser movido por vez e nunca um disco maior deveria ficar por cima de um disco menor. Segundo a lenda, quando todos os discos fossem transferidos de uma estaca para a outra, o templo desmoronar-se-ia e o mundo desapareceria.

Tower of Hanoi.jpeg

Estado inicial

No caso desse trabalho, usaremos apenas 3 discos. Também consideraremos que o pino a esquerda é o pino A, o pino central é o B e o C é o pino a direita. Por fim, temos três discos, o pequeno, o médio e o grande.

  • Inicia-se com todos os discos empilhados no pino A. O Grande em baixo, o médio em cima do grande e por cima de todos o pequeno.

Trabalho

Implementar um programa que resolve o problema da Torre de Hanoi, movendo todos os discos do pino A para o pino B.

Para isso, deve-se

  • Implementar uma pilha para ser utilizada para representar os pinos A, B e C.
  • Implementar uma árvore n-ária para conter as opções possíveis de movimentação dos discos de um pino para o outro.
  • Encontrar na árvore n-ária uma solução para a resolução da torre de hanoi e implementar uma lista para encontrar um caminho feito de cada estado, passos ou movimentação dos discos nos pinos, do estado inicial até a solução.
  • A árvore vai sendo criada recursivamente, quando o nó destino for encontrado, é criada uma lista, fazendo um backtracking do nó destino até o nó origem, armazenando essas informações em uma lista. Essa lista é retornada como resultado, não precisando mais da árvore para conter as informações.

Considere as seguintes restrições

  • Nenhum disco pode estar sobre um disco melhor;
  • Apenas um disco pode ser movido por vez, e sempre que ele for retirado de um pino, deve ser colocado em outro para que outra operação possa ocorrer;
  • Uma pilha pode ter apenas as seguintes operações:
    • Colocar um elemento no topo;
    • Ver qual elemento está no topo;
    • Retirar o elemento do topo.
  • Em um alista, pode-se adicionar ou retirar elemento de qualquer parte, pode-se navegar do início para o fim e do fim para o início.

Problema Resolvido

Trabalho Final