汉诺塔
来源:互联网 发布:捡人软件 编辑:程序博客网 时间:2024/06/03 16:54
汉诺塔:
汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
解题思路:
这里先把复杂的问题简单化。很多人举过这样的例子:如何把大象放进冰箱?
答案出乎意料的简单:
- 打开冰箱门
- 放进大象
- 关闭冰箱门
那么这个问题我们先用一下数学归纳法
将三根柱子分别命名为:初始柱A(from)、辅助柱:B(inter)、目标柱:C(to)
如果只有1个盘子:
- 从A移动1号盘到C。
如果有2个盘子:
- 从A移动1号盘到B;
- 从A移动2号盘到C;
- 从B移动1号盘到C。
如果三个盘子的话
- 从A移动1号盘到C;
- 从A移动2号盘到B;
- 从C移动1号盘到B;
- 从A移动3号盘到C;
- 从B移动1号盘到A;
- 从B移动2号盘到C;
- 从A移动1号盘到C。
我们可以这么想:
1、从A移动n-1个盘子移动到B
2、从A移动1号盘到C
3、从B移动n-1个盘到C
第一步:A(from),B(to),c(inter)
第二步:A(from),C(to)
第三步:B(from),A(inter),C(to)
代码实现
public class Dish { public static void MoveDish(int leve ,String from,String inter,String to) { if(leve == 1){ //如果只有一个盘子就退出迭代 System.out.println("从"+from+"移动1号盘到"+to); }else{ //如果有大于一个盘子就继续迭代 MoveDish(leve-1, from, to, inter); System.out.println("从"+from+"移动"+leve+"号盘到"+to+""); MoveDish(leve-1, inter,from, to); } } public static void main(String[] args) { int dish = 3; MoveDish(dish, "A", "B", "C"); }}
运行结果
阅读全文
0 0
- 汉诺塔
- 汉诺塔
- 汉诺塔
- 汉诺塔
- 汉诺塔
- 汉诺塔
- 汉诺塔
- 汉诺塔
- 汉诺塔
- 汉诺塔
- 汉诺塔
- 汉诺塔
- 汉诺塔
- 汉诺塔
- 汉诺塔
- 汉诺塔
- 汉诺塔
- 汉诺塔
- AndroidStudio svn主干和分支代码进行合并
- Java Encoding
- JAVA多线程之wait/notify
- form表单提交的几种方法
- STM32 IAP 在线升级详解
- 汉诺塔
- 【笔试】Java实现常用的排序算法:直插、冒泡和快排
- eclipse护眼颜色
- C# InstallShield打包设置相对路径
- STM32 DAC输出,引脚设置成模拟输入
- php面试总结
- 交叉编译器不兼容问题
- ssh别名访问远程服务
- SpringMvc解析流程图