【理解】汉诺塔问题,新手看这里
来源:互联网 发布:明代宗 知乎 编辑:程序博客网 时间:2024/05/29 11:09
最近在研究数据结构,书中提到了汉诺塔这一问题,由于代码太过简介,所以看懂这段代码花费了我一点时间,现在我把分析过程分享出来,便于新手朋友理解。
首先,先解释一下什么是汉诺塔:
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
然后,代码分析(分析过程已在代码中注释)
package ch03;public class Example3_4 {// c为移动次数private int c = 0;// 构造汉诺塔// 参数一:圆盘序号// 参数二:原塔(初始时,圆盘所在的塔)// 参数三:辅助塔// 参数四:目标塔(圆盘最终需要移动到的塔)public void hanoi(int n, char x, char y, char z) {//如果圆盘序号为1,只需移动一次即可到达目标盘if(n == 1) {move(x, 1, z);}//如果圆盘序号大于1,则需要借助辅助塔,将其它盘移走//移动步骤://1.将压在目标圆盘之上的所有圆盘移动到辅助塔(这时,以目标塔作为辅助塔)//2.将目标圆盘移动到目标塔上else {// 将序号为1到n-1的圆盘,从原塔x,借助辅助塔z,移动到塔y上hanoi(n - 1 , x, z, y);// 将序号为n的圆盘从x塔移动到z塔(目标塔)move(x, n, z);// 更新汉诺塔(由于移动,此时x塔已为空塔,在接下来的操作中,我们可以把它当做辅助塔)// 将序号为1到n-1的圆盘,从原塔y,借助辅助塔x,移动到塔z上// 注意:z塔为最终的目标塔hanoi(n - 1, y, x, z);}}//移动圆盘//参数一:原塔//参数二:圆盘序号//参数三:目标塔public void move(char x, int n, char z) {//日常输出System.out.println("第" + ++c + "次移动:" + n + "号圆盘," + x + "->" + z);}public static void main(String[] args) {Example3_4 e = new Example3_4();e.hanoi(4, 'x', 'y', 'z');}}
阅读全文
0 0
- 【理解】汉诺塔问题,新手看这里
- 看这里看这里看这里
- 调试 卡死的问题看这里
- nyoj02 括号配对问题runtimeerror看这里
- 看这里
- params 看这里看这里
- tableView中的一些问题-新手必看
- 新手看这里,分享+总结关于论坛的使用(10-25更新
- 浅谈java正则表达式(新手必看,易理解,通俗易懂)
- HI,myboy,看这里
- MYSQL1067错误看这里
- awk先看这里
- MYSQL1067错误这里看
- 联系看这里
- js基础看这里
- Fragment bug看这里
- SASS看这里
- 信用提升看这里
- MATHSF公式测试
- centos 系统如何重新安装ssh 远程服务
- OLTP && OLAP(DSS)的区别
- Node.js中的常用工具类util
- SQL Server安全管理
- 【理解】汉诺塔问题,新手看这里
- zk的jar包冲突:java.lang.NoSuchMethodError: org.apache.zookeeper.ZooKeeper.getChildren(Ljava/lang/String;
- 读MNIST源码(二):tensorflow基础
- oracle ebs
- 猫狗大战遇到问题
- Linux内核编程 -- 从HelloWord到基于NetFilter的Linux驱动Demo
- 如何关闭Golang中的HTTP连接 How to Close Golang's HTTP connection
- ORA-39365 Error Reported by DataPump Import (IMPDP) When SUPPLEMENTAL_LOG_DATA_MIN Is Set To YES (文档
- WLAN连不上网和以太网连不上网的解决办法