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}

  

 

原文地址:https://www.cnblogs.com/black-mamba/p/8973112.html