algoritmo de Python - buena solución recursiva - Torre de Hanoi problema

Torre de Hanoi problema

El significado de los problemas

Una columna en el bloque transfiere a la C

Condición 1 - cada uno sólo puede transferir una

Condición 2 - la presión no es pequeño trozos más rápidas

Resolver

concepto principio

Los elefantes de refrigerador pregunta cargada

1. Abra el refrigerador

2. Insertar elefante

3. Cerrar el refrigerador 

En analogía cualquier bloque es n

1. Los bloques anteriores se movieron buena

2. n bloques se mueven más allá

3. bloque Antes encima del bloque en la parte superior n

Simplificar el problema, considere mover el 123 pueden ser considerados como quiero pasar 3 está obligado a mover 12

Del mismo modo quiero mover 2, tendrá que mover 1 , esa relación

f (3) ---> f (2) ---> f (1) problemas en separada Esquema 3, 2, 1, es decir, empuje el cebador inverso

f (3) ==> f (1) + premisa (2) es 2,1 a 3 Problema

f (2) ==> f (1) 2 a condición de que emite un procesamiento de bloque

análisis de flujo

El empleador para describirlo, cada bloque tiene un trabajador responsable de

N Tres trabajadores de la capacidad de

1. El bloque de n-ésimo sólo se puede mover a cualquier puesto

2. n puede pedir a los trabajadores que le ayude en su bloque de presión proceso anterior (n-1 tratadas por los trabajadores)

3. n es el trabajo final sobre los trabajadores se desplazan a la diana n th-bloque de columnas

Prolongación de la hora de determinar qué columnas de la columna que desea mover.

Hay tres pilares título. El primer pilar empezando tercer poste de la meta, y que el resto es una columna de transferencia

La columna se puede transferir como punto de tránsito, el objetivo final es tener tres columnas.

Antes de la Etapa Tres. Sólo los dos bloques superiores se colocan en una columna de tránsito

la implementación del código

DEF HNT (índice, Inicio, MID, Fin):
     # último hombre único trabajo consiste en ir al final del primer bloque 
    SI Índice == 1. :
         Imprimir  " {} ---> {} " .formato (Inicio, fin)
     la cosa :
         # alguien para mover el bloque superior, la primera transferencia de hecho en la mitad 
        . HNT (índice - 1 , inicio, fin, a mediados)
         # sí mismos para bloquear su movimiento a la columna de destino 
        de impresión  " {} - -> {} " .formato (inicio, final)
         # medida que las personas se mueven hacia atrás al bloque anterior, antes de la mitad, Finalizar ahora, utiliza el relé de arranque 
        HNT (índice -. 1 , mediados, inicio, fin)


Si  __name__ == ' __main__ ' :
    HNT ( 3, " A " , " B " , " C " )
    
    # A ---> C 
    # A ---> B 
    # C ---> B 
    # A ---> C 
    # B ---> A 
    # B ---> C 
    # A ---> C

 

Supongo que te gusta

Origin www.cnblogs.com/shijieli/p/12606985.html
Recomendado
Clasificación