问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

这是Towers of Hanoi问题的Java方法,请高手解释一下

发布网友 发布时间:2022-04-30 16:11

我来回答

1个回答

热心网友 时间:2022-06-27 03:59

递归问题:
Java汉诺塔算法

  汉诺塔问题[又称河内塔]是印度的一个古老的传说。

  据传开天辟地之神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。就是这看似简单的问题,却困扰了人们千年以上。

  后来,这个传说就演变为汉诺塔游戏,玩法如下:

  1.有三根杆子A,B,C。A杆上有若干碟子
  2.每次移动一块碟子,小的只能叠在大的上面
  3.把所有碟子从A杆全部移到C杆上

  解题思维:题中只给了三座塔,我们利用C塔将圆盘堆在B塔。首先将A塔的1号圆盘放在B塔,A塔的2号圆盘放在C塔,再把放在B塔的1号圆盘放在C塔,此时C塔拥有两个圆盘按要求自下而上从小到大排列。接下来将A塔的3号圆盘放在B塔,将C塔的1号圆盘放在B塔,把C塔德2号圆盘放在A塔,再把B塔的1号圆盘放在A塔,此时C塔空,1号2号按要求排在A塔,B塔只有3号圆盘。此时把B塔3号圆盘放在C塔,把A塔德1号放在B塔吗,把A塔德2号房在C塔,再把B塔德1号放在C塔,此时B塔空,C塔按要求排有123号圆盘。这次把A塔的4号圆盘放在B塔,这次就比较麻烦了先把C塔的1号放在A塔,C塔的2号房在B塔,再把A塔德1号放在B塔,把C塔德3号放在A塔,再把B塔的1号放在C塔,把B塔德2号放在A塔,再把C塔德1号放在A塔,此时C塔空,B塔只有4号圆盘,A塔按要求房有123到N号圆盘,缺4号圆盘。现在把B塔的4号圆盘房在C塔,现在推回去,把A塔德1号房在C塔,A塔的2号房在B塔,再把C塔的1号放在B塔,把A塔德3号房再C塔,此时刚好是3号压4号于C塔,再把,B塔的1号房在A塔,把C塔的2号放在C塔,把A塔的1号放在C塔,这下刚好推回来,此时B塔空,A塔最上面是5号圆盘,C塔按要求放有1234号圆盘。
  按这样的递推方法,将n-1个圆盘按要求放在C塔,第n个圆盘放在B塔,现在A塔空。n号圆盘是最大的圆盘,按问题要求我们终于把n号最大的圆盘放在了B塔,这下借助已空的A塔联合BC塔推回来,就可以把n个圆盘按要求放在B塔。

1 import java.io.BufferedReader;
2 import java.io.InputStreamReader;
3
4 public class Hanoi {
5 public static void main(String args[]) throws Exception {
6 int n;
7 BufferedReader buf =
8 new BufferedReader(new InputStreamReader(System.in));
9 System.out.print("请输入盘数:");
10 n = Integer.parseInt(buf.readLine());
11 Hanoi hanoi = new Hanoi();
12 hanoi.move(n, 'A', 'B', 'C');
13 }
14
15 public void move(int n, char a, char b, char c) {
16 if (n == 1)
17 System.out.println("盘 " + n + " 由 " + a + " 移至 " + c);
18 else {
19 move(n - 1, a, c, b);
20 System.out.println("盘 " + n + " 由 " + a + " 移至 " + c);
21 move(n - 1, b, a, c);
22 }
23 }
24 }
这是Towers of Hanoi问题的Java方法,请高手解释一下

按这样的递推方法,将n-1个圆盘按要求放在C塔,第n个圆盘放在B塔,现在A塔空。n号圆盘是最大的圆盘,按问题要求我们终于把n号最大的圆盘放在了B塔,这下借助已空的A塔联合BC塔推回来,就可以把n个圆盘按要求放在B塔。1 import java.io.BufferedReader;2 import java.io.InputStreamReader;3 4...

如果这是问题请回答 请问题中的意思是什么意思 TSP问题Java实现 java常遇到的问题 java容易出现的问题 java编程遇到的问题 请以单一问题 请回答我的问题 请正面回答我的问题
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...提升额度至27000元,4.30号我打电话给光大银行确认提额 树人大学体质测试身高159.2,体重51.3。仰卧起坐26个。立定跳远1.62,体... 10分`我有个MP3可以播放视频能播放电影么? ?玫瑰花茶晚上喝好还是白天喝好 玫瑰花茶晚上喝会影响睡眠吗 睡前喝花茶好吗 睡眠不足能喝花茶吗 会吃鱼的人聪明吗 宝宝攒肚与便秘的区别是什么呢? 什么才是所谓的幸福 如何判断宝宝是否出现了攒肚? 如何清洗汉兰达节气门 磁感应强度到底是矢量还是标量啊?为什么看了几本参考书,有的说是标量,有的说是矢量? java新手汉诺塔问题最终的输出结果如下(问题规模为3),其中盘子的编号是汉诺塔问题中从上到下的顺序。 西安市高新区房管局官方网站 三男一女打篮球 猜一个生肖是什么 小天才Q1A网络很卡 gmail邮箱最大附件容量? java实现汉诺塔的代码,求注释,具体到每一行代码,急求,,, 汉兰达两年近4w公里需要清洗节气门吗 惊天动地66级的任务 磁场强度分别是矢量还是标量,为什么 如何用java实现汉诺塔中的递归 丰田汉兰达洗节气门要排空气吗 西安在哪个网站上可以查询到商品房的房产证办理进度?谢谢! 偷梁换柱上屋顶打一生肖。十八少年打篮球打一生肖。偷梁换柱上屋顶猜一生肖。十八少年打篮球猜一生肖 磁感应强度是矢量还是标量? 急求Java 汉诺塔 编程!! GMail邮箱一次能上传多大的文件 汉兰达费油洗节气门管用吗 瀑布王半自动洗衣机注水时一直排水是什么问题 我以前的qq密码找不回来怎么办 为什么速度是矢量? 磁场强度与电流强度是矢量吗?为什么? 矢量和标量都包括什么? 去饭店点个菜 半天都不上 只好叫服务员 给我来壶开水 充充饥吧 可她却给我回了句 先生您还真爱干净 小天才z1s内存会不够用吗? javajava中如何实现汉诺塔的编程,请求简单一点,本人才学java一年多,新手! 汉兰达清洗完节气门怠速还不稳 google邮箱能发多大的附件 磁场强度是矢量,而磁感应强度是标量!这句话正确吗? 棒棒堂六棒名字 JAVA汉诺塔问题,要求定义类之后 谁知道我爱罗所有的出场集数 JAVA 汉诺塔 新款汉兰达3万公里有没有必要清洗节气门喷油嘴 gmail邮箱的附件大小是多少啊 磁感应强度是矢量,但磁场强度是标量,这是两者之间的根本区别是对还是错? 求棒棒堂的资料 火影忍者的我爱罗在哪几集出现? 用java实现汉诺塔的程序是啥呀? 请问华为荣耀十屏幕锁忘记了该怎么解锁? 新汉兰达2.0t的节气门是免拆清洗的吗?