汉诺塔问题
2018-12-02 06:17:28来源:博客园 阅读 ()
通过几日的查资料,汉诺塔问题终于有了些头绪,在这里将近日的成果整理一下,也为各位朋友提供一些参考资料。
汉诺塔问题想必大家都知道,先给出图
就是将图中A柱中的圆盘,通过B柱当辅助,一次移动一个,并且时刻保持大盘在上小盘在下,全部移动到C柱。
假设有A柱有N个圆盘,通过B柱移动到C柱。用数学中递归的思想来解决这个问题,先将N-1个移动到B柱,再将第N个移动到C柱,最后将N-1个移动到C柱。大功告成,继续,那么解决N-1个的问题,先将N-2个移动到A柱,再将第N-1个移动到C柱,最后将N-2个移动到C柱。再解决N-2个的问题,先将N-3个移动到B柱,再将第N-2个移动到C柱,最后将N-3个移动到C柱。以此往下,就可以移完,但移动的过程中有一个规律,就是在不停的变换起使柱和辅助柱,当N-1个移动到B柱时,辅助柱是C柱,当N-2个移动到A柱时辅助柱是B柱,当N-3个移动到B柱时辅助柱是C柱。通过这种规律,编写JAVA代码
public class Exercise2 { public static void main(String[] args) { char a = 'A'; char b = 'B'; char c = 'C'; //从键盘输入n Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); hanoi(n, a, b, c); } public static void hanoi(int n, char a, char b, char c) { //如果只有一个圆盘,则直接将圆盘从A柱移动到B柱 if(n == 1) { System.out.println("Disk 1 from " + a + " to " + c); }else { //先将n-1个圆盘从A柱通过C柱移动到B柱 hanoi(n-1, a, c, b); System.out.println("Disk " + n + " from " + a + " to " + c); //再将n-1个圆盘从B柱通过A柱移动到C柱 hanoi(n-1, b, a, c); } } }
通过方法的自我调用,实现递归,而在JAVA代码中改变的就是起使柱和辅助柱的参数序列。
这就是我大概的解题思路了,不足指出还望各位朋友多多指正。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Lambda 表达式
下一篇:今天只是一个记录点
- 通过与C++程序对比,彻底搞清楚JAVA的对象拷贝 2020-06-11
- SpringBoot通过web页面动态控制定时任务的启动、停止、创建 2020-06-09
- 面试的时候按照这个套路回答 Java GC 的相关问题一定能过 2020-06-08
- 我可真是醉了,一个SpringBoot居然问了我30个问题 2020-06-08
- Mybaties简单实例测试及注意问题 2020-06-07
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash