zoukankan      html  css  js  c++  java
  • python-hanoi

     1 #!/usr/bin/env python
     2 #-*- coding:utf-8 -*-
     3 ############################
     4 #File Name: hanoi.py
     5 #Author: frank
     6 #Mail: frank0903@aliyun.com
     7 #Created Time:2018-04-30 09:36:13
     8 ############################
     9 
    10 #基本思想是:先将最大的圆盘从src搬到dst
    11 #如果n=1,那么直接将圆盘从src搬到dst;
    12 #如果n=2,那么先将第1个圆盘从src搬到mid上,然后将第2个圆盘从src搬到dst,然后将第1个圆盘从mid搬到dst上;
    13 #如果有n个圆盘,那么先将n-1个圆盘从src搬到mid上,然后将第n个圆盘从srt搬到dst, 然后将n-1个圆盘从mid搬到dst;以此类推                 
    14 #可以这么理解,将n个圆盘抽象成"2个"圆盘,第n个圆盘当做"第2个"圆盘,另外的n-1个圆盘抽象成"第1个"圆盘,那么就可以当做是"2个"圆盘的搬运;
    15 #不同层次的圆盘移动时,src,mid,dst会发生相应的变化,而不是最初第n个圆盘移动时的位置,这样就保证所有移动的准确性且不会冲突
    16 #总之,抽象成"2个圆盘"的思路,并保证圆盘移动步骤的闭合性,就能确保程序的正确运行
    17 count = 0
    18 
    19 def hanoi(n, src, mid, dst):
    20     global count
    21     
    22     if n == 1:
    23     ¦   print("{}:{}--->{}".format(n, src, dst))
    24     ¦   count += 1
    25     else:
    26     ¦   hanoi(n-1, src, dst, mid)
    27     ¦   print("{}:{}--->{}".format(n, src, dst))
    28     ¦   hanoi(n-1, mid, src, dst)
    29     ¦   count += 1
    30 
    31 hanoi(3, "A", "B", "C")
    32 print(count)
    33 
    34 #n=3时,圆盘搬运的具体过程如下:
    35 #
    36 #hanoi(2, A, C, B)
    37 #    hanoi(1, A, B, C)
    38 #        print("{}:{}--->{}".format(1, A, C)) ==={1:A--->C}
    39 #    print("{}:{}--->{}".format(2, A, B)) ==={2:A--->B}
    40 #    hanoi(1, C, A, B)
    41 #        print("{}:{}--->{}".format(1, C, B)) ==={1:C--->B}
    42 #print("{}:{}--->{}".format(3, A, C)) ==={3:A--->C}
    43 #hanoi(2, B, A, C)
    44 #    hanoi(1, B, C, A)
    45 #        print("{}:{}--->{}".format(1, B, A)) ==={1:B--->A}
    46 #    print("{}:{}--->{}".format(2, B, C)) ==={2:B--->C}
    47 #    hanoi(1, A, B, C)
    48 #        print("{}:{}--->{}".format(1, A, C)) ==={1:A--->C}

      

     

  • 相关阅读:
    二叉树的前中后序遍历(非递归)
    剑指offer——圆圈中最后剩下的数字
    剑指offer——和为s的连续正整数序列
    leetcode300.最长上升子序列
    将网络描述符设置为非阻塞的场景
    leetcode72.编辑距离
    浅谈各种锁机制
    TCP如何保证可靠传输?
    JavaScript(七)
    JavaScript(六)
  • 原文地址:https://www.cnblogs.com/black-mamba/p/8973112.html
Copyright © 2011-2022 走看看