|

楼主 |
发表于 2020-4-13 21:42:41
|
显示全部楼层
- # 将大小不同的盘子从X位置移动到Z位置,要求小盘子必须在大盘子上面
- # 每次只能移动一个盘子
- # 将n-1个盘子看做一个整体:[n-1]:X-->Y, n:X-->Z, [n-1]:Y-->Z
- def hanoi(n,x,y,z):
- global count
- if n == 1:
- print('line7:\t第%d步:%d号从%s到%s'% (count,n,x,z))
- count += 1
- else:
- hanoi(n-1,x,z,y) # 将n-1个盘子由X移动到Y上
- print('line11:\t第%d步:%d号从%s到%s'%(count,n,x,z)) # 将最底下的盘子由X移动到Z上。
- count += 1
- hanoi(n-1,y,x,z)# 将Y上的n-1个盘子由Y移动到Z上
-
- count = 1
- n = int(input('输入盘子的个数:'))
- print()
- print('盘子从小到大:1号到%d号'%n)
- print()
- hanoi(n,'X','Y','Z')
- '''
- hanoi(1,x,y,z) --->print('line7:x-z')
- hanio(2,x,y,z) ---> hanoi(1,x,z,y)
- print('line11:x-z')
- hanoi(1,y,x,z)
-
- 展开---> print('line7:x-y')
- print('line11:x-z')
- print('line7:y-z')
-
- hanio(3,x,y,z) ---> hanoi(2,x,z,y)
- print('line11:x-z')
- hanoi(2,y,x,z)
-
- 展开---> hanoi(1,x,z,y)
- print('line11:x-z')
- hanoi(1,x,y,z)
- print('line11:x-y')
- hanoi(1,x,z,y)
- print('line11:x-z')
- hanoi(1,x,y,z)
-
- 再展开---> print('line7:x-z')
- print('line11:x-y')
- print('line7:z-y')
- print('line11:x-z')
- print('line7:y-x')
- print('line11:y-z')
- print('line7:x-z')
- '''
复制代码
~~~~~~~~~~~~~~~~~~
做了一个展开,终于看清怎么回事了。 |
|