汉诺塔的规则限定导致可以从第n层倒推出n-1层的移动方式,然后一直倒退到n=1时退出。特别适合使用迭代来实现。

按规则在将n-1层移走之前,n层是不能动的,要移动第n层,必须先将其上的n-1层设法移走到B上,因为要移动n到c上,c上不能有任何盘子,所以只能设法放到B上。按规则来无论如何都得先满足这一步

在将a上的n移动到c上之后,问题就变成了如何将b上的n-1层hanoi塔移动到c上。

同样的n-1层的问题可以倒推为2个n-2层的hanoi塔问题, 这样一直倒推到只有一层的简单情况。可以倒推的根本原因还是它的规则限定下只有这么一种选择,可以倒推。

/*** 汉诺塔游戏: * 1.有三根柱子A,B,C。A柱上有若干碟子 * 2.每次移动一块碟子,小的只能叠在大的上面 * 3.把所有碟子从A柱全部移到C柱上*/
public class HanoiDoTest
{public static void main(String[] args){int nDisks = 2;doHanoi(nDisks, "左边A柱子", "中间B柱子", "右边C柱子");}/*** 移动盘子 思路:将n层汉诺塔递归到n-层汉诺塔的解决(可以这样是因为n-1层都比n层小,无论怎样移动都一定符合规则),一直到1层汉诺塔,1层的时候是可以直接移动的,这时可以退出递归。* * * @param n 代表有多少个盘子* @param from 移动哪个盘子上面的内容 开始的柱子* @param inter 中间的盘子 中间的柱子* @param to 移动的盘子到哪个上面柱子上去 目标柱子*/public static void doHanoi(int n, String from, String inter, String to){// 倒着推测,如果要移动A柱底部的第n个大盘必须把C柱清空,然后把A的n-1个盘都设法移动到B上,然后才能把A上的n大盘移动到C上,然后再设法把B上的n-1层的hanoi塔移动到C上就成了C的n层hanoi塔,然后再迭代两个n-1层hanoi塔就行了。// if (n > 0){// 把A上n-1的Hanoi盘子移动到B柱子上(具体怎么移动要继续进行迭代,但是必然有一步是把底部的大盘子移动到已清空的杆子上)doHanoi(n - 1, from, to, inter);//把A底部第n层大盘子移动到已经清空的C上System.out.println("Disk " + n + " from " + from + " to " + to);// 然后中间B柱子n-1的Hanoi盘子移动到C柱子上(具体怎么移动要继续进行迭代,但是必然有一步是把底部的大盘子移动到已清空的杆子上)doHanoi(n - 1, inter, from, to);}}
}

汉诺塔的java实现及一种思路相关推荐

  1. 汉诺塔问题java编程,Java经典编程300例之实例047 汉诺塔问题求解(递归)

    实例说明 汉诺塔问题的描述如下:有A.B和C 3跟柱子,在A上从下往上按照从小到大的顺序放着64个圆盘,以B为中介,把盘子全部移动到C上.移动过程中,要求任意盘子的下面要么没有盘子,要么只能有比它大的 ...

  2. 经典汉诺塔(Java初学递归篇)

    大一学C的时候已经接触到汉诺塔递归的问题,当时只是简单了解过方法,最近开了算法课,打算重新捋一捋. 题目描述:         有三根柱子分别为A.B.C,柱子A上从下到上按金字塔状叠放着n个不同大小 ...

  3. 汉诺塔模拟器java

    游戏规则:百度百科 技巧: import java.util.LinkedList; import java.util.Scanner;public class 汉诺塔模拟器 {LinkedList& ...

  4. 用java语言实现汉诺塔问题 (Java经典编程案例)

    用递归实现汉诺塔问题,代码如下: import java.util.Scanner;/*** 汉诺塔问题*/ public class Example {public static void move ...

  5. 汉诺塔问题 Java详解

    作为一个Java初学者,看韩顺平老师的递归那一段,提到了汉诺塔的问题,但是大家普遍感到困惑,尤其是韩老师讲到的"借助"这个词,让不少同学感到无法理解. 实际上,借助在三行移动的代码 ...

  6. 汉诺塔算法 java_汉诺塔算法java实现详解

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public ...

  7. 通俗易懂_汉诺塔(java递归实现)

    汉诺塔 汉诺塔介绍 汉罗塔游戏简单来说就是,有三根柱子(记作ABC),A柱子上有从小到大的若干个圆盘,我们要怎么把A柱子上的这若干个圆盘全部挪到C,并且保证顺序还是从小到大. 规则是:挪的过程中大圆盘 ...

  8. 汉诺塔游戏java下载,利用python实现汉诺塔游戏

    本文实例为大家分享了python实现汉诺塔游戏的具体代码,供大家参考,具体内容如下 一.汉诺塔 汉诺塔问题是一个经典的递归问题,对于这个问题,我们可以把它简单的去看成是如何用n-1去表示n. 在A,B ...

  9. 汉诺塔(java版)

    汉诺塔原理 汉诺塔规则:有A.B.C三根柱子,设汉诺塔层数为N,则最底最大的一个盘数便是N.例如下图有三层则N=3,我们只需将A柱上(1-N)个盘全部移至B柱或C柱上即可(挪动盘时,N值大的必须放在N ...

最新文章

  1. python编程问题--第四次
  2. python语言结构_Python语言表示语句结构时采用
  3. web静态资源访问规则||webjars的访问配置——webjars是maven库里面对css js image打的一个jar包
  4. Android读取短信和联系人
  5. 网络摄像头实时获取信息
  6. java char 空_2020重新出发,JAVA入门,数据类型
  7. 神奇的go语言(基本语法)
  8. LeetCode刷题(23)
  9. android浏览系统分区,Android系统分区
  10. 学而思编程python软件怎么样_学而思编程社区缺点详细分析
  11. 中文版的XP转换为英文版的XP和XP多国语言包
  12. 通过DLL文件实现函数共有及通过调用_stdcall来减少程序文件的大小
  13. 如何抓取图片php,PHP网络爬虫之图片抓取
  14. 谷歌工程师深度技术分析“为什么ios比android流畅
  15. css rgb转16进制,jquery获取元素颜色css('color')的值返回RGB。如何转十六进制
  16. 人工智能的创业“风口”
  17. 半年学好英语,一辈子都能受益。
  18. java中的类的继承_Java中类的继承
  19. 【sbt】sbt package与sbt assembly
  20. 2021-06-28 什么是一清机跟二清机、费率、分润、MCC码_POS机

热门文章

  1. 2021母婴行业洞察报告.pdf(附下载链接)
  2. 【经典回顾】YouTube 深度学习推荐系统的十大工程问题(附论文下载链接)
  3. 速成pytorch学习——1天
  4. 腾讯广告北京招聘专场,offer等你解锁
  5. NLP简报(Issue #3)
  6. java+tableseg,多种功能集成,带Refresh刷新的tableV,Seg分段控件
  7. 吴恩达机器学习作业 6.支持向量机
  8. 解决忽略vscode中pylint报错的问题
  9. springboot security
  10. android:id = @+id 用法,@+id/android:list和@android:id/list的写法