Primeira vez aqui? Seja bem vindo e cheque o FAQ!
x

Como Implementar iterativamente a solução da torre de Hanoi usando uma classe para pilhas?

+1 voto
11 visitas
perguntada Abr 11 em Programação Computacional por Douglas Sad Silveira (31 pontos)  
Compartilhe

1 Resposta

0 votos
respondida Abr 11 por Douglas Sad Silveira (31 pontos)  
  """
Created on Thu Apr 11 01:38:22 2019

@author: Douglas Silveira
"""

class TorreDeHanoi:
     def __init__(self, numDiscos, origem, intermed, destino):
         self.numDiscos = numDiscos
         self.torres = {
                        origem: Stack(),
                        intermed: Stack(),
                        destino: Stack()
                       }
         for i in range(n, 0, -1):
             self.torres[origem].push(i);

     def moverDisco(self, origem, destino):
         self.torres[destino].push(self.torres[origem].pop())
         print("{} para {}".format(origem, destino))

     def moverTorre(self, n, origem, intermed, destino):
         if n >= 1:
            self.moverTorre(n-1, origem, destino, intermed)
            self.moverDisco(origem, destino)
            self.moverTorre(n-1, intermed, origem, destino)

class Stack:
     def __init__(self):
         self.items = []

     def isEmpty(self):
         return len(self) == 0

     def push(self, item):
         self.items.append(item)

     def pop(self):
         if not self.isEmpty():
             return self.items.pop()
         else:
             raise IndexError("pop from empty Stack")

     def peek(self):
         return self.items[len(self.items)-1]

     def __len__(self):
         return len(self.items)

n = int(input("número de discos: "))
torre = TorreDeHanoi(n, "Origem", "Intermediária", "Destino")
torre.moverTorre(n, "Origem", "Intermediária", "Destino")
...