zoukankan      html  css  js  c++  java
  • 汉诺塔

    '''
    问题:
        有三个柱子A、B、C。移动n个盘子从 A -> C
    分析:
        步骤1: 移动前n-1个盘子 A -> B
        步骤2: 移动第n个盘子 A -> C
        步骤3: 移动前n-1个盘子 B -> C
    实验:
        (n个盘子从上到下编号:1, 2, 3,...,n)
        n=2:
            move 1 A -> B  步骤1:移动前n-1个盘子 A -> B
            move 2 A -> C  步骤2:移动第n个盘子到 A -> C
            move 1 B -> C  步骤3:移动前n-1个盘子 B -> C
        n=3:
            move 1 A -> C
            move 2 A -> B
            move 1 C -> B  移动前n-1个盘子 A -> B
            move 3 A -> C  移动第n个盘子到 A -> C
            move 1 B -> A
            move 2 B -> C
            move 1 A -> C  移动前n-1个盘子 B -> C
        n=4:
            4 A C
            3 A B
            4 C B
            2 A C
            4 B A
            3 B C
            4 A C
    可以看到,
    要把盘子A->B 要通过C,
    把盘子从B->C要通过A
    def move(n, start,end, middle)
        move n   start -> middle
        move n-1 start -> end
        move n   middle-> end
        if n==1:
            move 1 A -> C
        move(n, 'B', 'C', 'A')
    '''
    
    
    # def move(n, A, B, C):  # 从A -> B通过C
    #     print('move %d %s -> %s' % (n, A, C))
    #     print('move %d %s -> %s' % (n - 1, A, B))
    #     print('move %d %s -> %s' % (n, C, B))
    #     n -= 1
    #     if n == 1:
    #         return
    #     move(n, B, C, A)  # 从B -> C通过A
    # move(3, 'A', 'B', 'C')
    def hanoi(n, a, b, c):
        if n == 1:
            print(n, a, '-->', c)  # 移动第n个盘子到 A -> C
        else:
            hanoi(n - 1, a, c, b)  # 移动前n-1个盘子 A -> B 通过 C
            print(n, a, '-->', c)
            hanoi(n - 1, b, a, c)  # 移动前n-1个盘子 B -> C 通过 A
    # 调用
    hanoi(3, 'A', 'B', 'C')
  • 相关阅读:
    LintCode: Climbing Stairs
    LintCode: Binary Tree Postorder Traversal
    LintCode: Binary Tree Preorder Traversal
    LintCode: Binary Tree Inorder Traversal
    Lintcode: Add Two Numbers
    Lintcode: Add Binary
    LintCode: A + B Problem
    LintCode: Remove Linked List Elements
    LintCode:Fibonacci
    Lintcode开刷
  • 原文地址:https://www.cnblogs.com/staff/p/11403341.html
Copyright © 2011-2022 走看看