汉诺塔游戏
来源:互联网 发布:深圳数据分析师工资 编辑:程序博客网 时间:2024/06/05 14:17
游戏规则:
有A,B,C三根针,将A针上N个从小到大叠放的盘子移动到C针,一次只能移动一个,不重复移动,小盘子必须在大盘子上面。
关键分析:
将N-1个盘子从A移动到B,然后将第N个盘子从A移动到C。
剩下N-1个盘子需要从B移动到C,此时的中转站则从B变成了A(鉴于这时盘子都在B针),目标仍然是C针。
下一次重复的时候,只剩下A上的N-2个盘子需要移动(N-1与N都已经移动到了C),中转站又变成B,目标不变仍然是C针。
……整个过程中,变化的只是中转站(在A与B之间轮换),以及剩下那些所需要移动的盘子的总数(越来越少)而已。
伪代码:
FUNCTION MoveTower(disk, source, dest, spare):
IF disk == 0, THEN:
move disk from source to dest
ELSE:
MoveTower(disk - 1, source, spare, dest) // Step 1 above
move disk from source to dest // Step 2 above
MoveTower(disk - 1, spare, dest, source) // Step 3 above
END IF
代码:
#!/usr/bin/env python3# -*- coding: utf-8 -*-count = 0def move(n, source, destination): global count print("move disk {0} from {1} to {2} ".format(n, source, destination)) count = count + 1def hanoi_tower(n, source, spare, destination): if n >= 1: hanoi_tower(n-1, source, destination, spare) move(n, source, destination) hanoi_tower(n-1, spare, source, destination)hanoi_tower(3,'A','B','C')print("the move count is :",count)
运行结果:
move disk 1 from A to C move disk 2 from A to B move disk 1 from C to B move disk 3 from A to C move disk 1 from B to A move disk 2 from B to C move disk 1 from A to C the move count is : 7
参考:
http://www.zhihu.com/question/24385418/answer/46241635
http://www.zhihu.com/question/24385418
hanoi塔游戏规则图示及分析
http://stackoverflow.com/questions/17506947/local-variable-count-referenced-before-assignment
- 汉诺塔游戏
- 汉诺塔游戏
- 汉诺塔游戏
- 汉诺塔游戏
- 汉诺塔游戏
- 汉诺塔游戏
- 汉诺塔游戏
- 求助! java游戏“汉诺塔”
- 汉诺塔游戏的设计
- 汉诺塔游戏研究
- wikioi p3145 汉诺塔游戏
- 模拟汉诺塔游戏
- wikioi 3145 汉诺塔游戏
- [Wikioi 3145]汉诺塔游戏
- wikioi汉诺塔游戏c
- 汉诺塔游戏求解
- CODEVS 3145 汉诺塔游戏
- 《CTCI》3.4 汉诺塔游戏
- 协议栈数据发送
- spring mvc mybatis 整合
- python—解决“Unable to find vcvarsall.bat”错误
- SQL——JDBC的介绍
- 反射类方法
- 汉诺塔游戏
- 2016.8.10
- 关于图片边距和尺寸问题的几个实用方法
- tomcat 日志log4j,slf4j,logback冲突
- Linux基础(二)
- 【Python学习】Python写爬虫时用到的相对路径和绝对路径--urljoin
- 【Python学习】Mac+Eclipse 安装BeautifulSoup4
- 62. Unique Paths
- 反射类的构造方法