Torre de Python problema Hanoi

En primer lugar, el código Torre de Hanoi

= COUNT 0
 DEF Hanoi (n-, la src, DST, MID): # definen cuatro parámetros representan el número de discos, la columna de la fuente, la columna de destino, la transición columna del medio 
    mundial COUNT   # implementado usando variables globales en una palabra reservada mundial 
    SI n - == 1. :
         Imprimir ( " PASO {} {} -> {} " .formato (1, sRC, DST).) # Si sólo un disco, la columna se trasladó al destino directamente desde la fuente a la columna 
        recuento + . 1 = la otra cosa : 
        Hanoi (n- -1, la src, MID, DST) # el n-1 ésima columna del disco de origen para mover la columna intermedia de impresión ( " PASO {}: {} -> {} " .formato (n-, la src, DST)) # la última columna del disco de origen para mover la columna de destino 
        COUNT + =. 1 
        Hanoi (n-
    
        -1, MID, DST, la src) # la n-ésima columna 1 del disco intermedio a una columna de destino 
n- = int (INPUT ()) 
Hanoi (n-, " A " , " C " , " B " )

 

La presentación de los resultados

En segundo lugar, la Torre de Hanoi animación

codificar las referencias https://blog.csdn.net/BeerBread134/article/details/69226991

El código se puede ejecutar hasta 7-fin Torre de Hanoi, sobre todo con la idea de recursividad y la pila, logrado con una tortuga.

la importación de tortugas 
 
clase Pila:
     def  __init__ (self): 
        self.items = []
     def estaVacia (auto):
         volver len (self.items) == 0
     DEF empuje (auto, elemento): 
        self.items.append (punto) 
    def pop (auto):
         retorno self.items.pop ()
     def peek (auto):
         si  no self.isEmpty ():
             retorno self.items [len (self.items) - 1 ]
     def tamaño (auto):
         retorno len ( self.items) 
 
defdrawpole_3 (): # Draw Torre de polos Hanoi 
    T = turtle.Turtle) ( 
    t.hideturtle) ( 
    DEF drawpole_1 (K): 
        t.up () 
        t.pensize ( 10 ) 
        t.speed ( 100 ) 
        T. Goto ( 400 * (. 1-K), 100 ) 
        t.down () 
        T. Goto ( 400 * (. 1-K), -100 ) 
        T. Goto ( 400 * (. 1-K) -20, -100 ) 
        T. GOTO ( 400 * (. 1-K) 20, -100 ) 
    drawpole_1 (0) # dibujar Torre de Hanoi Poles [0] 
    drawpole_1 (. 1) # dibujar Torre de Hanoi Poles [. 1] 
    drawpole_1 (2) #Dibuje Torre de Hanoi Poles [2] 
 
DEF creat_plates (n): # producir N discos 
    Placas = [turtle.Turtle () para I en Rango (n)]
     para I en Rango (n): 
        Placas [I]. uP () 
        Placas [I] .hideturtle () 
        Placas [I] .shape ( " cuadradas " ) 
        Placas [I] .shapesize ( 1,8 I) 
        Placas [I] .goto ( -400, -90 * + 20 es I) 
        Las placas [I] .showturtle () 
    de retorno placas 
 
DEF pole_stack (): # producir polos de la pila 
    polos = [pila () para Ien (. 3 Rango )]
     volver Polacos 
 
DEF moveDisk (placas, postes, FP, TP): # los polos [fp] a las placas de placa superior [MOV] de postes [fp] para mover Poles [TP] 
    MOV = polos [fp] .peek () 
    Placas [MOV] .goto ((FP -1) * 400,150 ) 
    Placas [MOV] .goto ((TP -1) * 400.150 ) 
    L = Poles [TP] .size () # determina el movimiento en la porción de extremo de altura (en la placa de justo por encima del original más superior) 
    placas [MOV] .goto (. (1-TP) * 400, * 20 es -90 + L) 
 
DEF moveTower (placas, postes, altura, fromPole, Topole, withPole): # bandeja de descarga recursiva 
    IF altura> = 1. : 
        moveTower (placas, postes, altura -1, fromPole, withPole, Topole) 
        moveDisk (placas, postes, fromPole, Topole) 
        polos [Topole] .push (polos .pop ([fromPole])) 
        moveTower (placas, postes, altura -1 , withPole, Topole, fromPole) 
 
myscreen = turtle.Screen () 
drawpole_3 () 
n = int (de entrada ( " 请输入汉诺塔的层数并回车: \ n " )) 
placas = creat_plates (n) 
polos = pole_stack ()
 para i en gama (n ): 
    polos [0] .push (i) 
moveTower (placas, postes, n, 0, 2,1 ) 
myscreen.exitonclick ()

Los resultados muestran

 

Supongo que te gusta

Origin www.cnblogs.com/Mindf/p/12590353.html
Recomendado
Clasificación