码迷,mamicode.com
首页 > 编程语言 > 详细

python-hanoi

时间:2018-04-30 13:32:34      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:pytho   creat   usr   抽象   span   思路   mat   else   最大   

 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}

  

 技术分享图片

 

python-hanoi

标签:pytho   creat   usr   抽象   span   思路   mat   else   最大   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!