汉诺塔应该都玩过,就是这个
,
几个木头套来套去的,小在大的上面,将他从1个棍子上弄到另外个上,小的时候玩的时候是有点挑战性,不过现在就差点了,昨天老师刚讲了他的最小移动算法,代码如下“
public static int num(int i) {
if(i == 1)
return 1;
return 1+num(i-1)*2;
}
所以就想能不能试着写下代码,试着表示如何移动,例如”1将第一根棍上编码为1的木头移动到第三根棍上“等等,还写了什么Wood,Stack等类,为他们也写了什么put,delete,isLegal方法,
最后写了大概半个小时,放弃了,我发现只能看规律,写一个方法,故上网看看其他人代码,结合自己的想法完成了代码
public class Test {
public static void main(String[] args) {
print("1","3","2",3);
}
/*
* index 现在的罗汉塔的位置 初始位置是1,之后有改变
* to 罗汉塔要移动到的位置
* replace 罗汉塔备用的那根
* i 最多有多少根木头
*/
public static void print(String index,String to, String replace, int i) {
//i == 1时不解释 你懂的
if(i == 1) {
System.out.println(index + "------>" + to);
return;
}
/*
* 当i不为1时,可以考虑将所有i-1个木头放在replace上
* 所以index不变,to的位置变为replace,replace变为to
*/
print(index,replace,to,i-1);
/*
* 将第i个木头放在to上
*/
System.out.println(index + "------>" + to);
/*
*现在所有i-1个木头都在replace上,要让它去to那
*所以index变为 replace,to不变,repalce变为index
*/
print(replace,to,index,i-1);
}
}
这画图有点难所以做了个zip,
里面就一个PPT,一个word[/size][size=medium][size=large][/size]我怕可能只装word没ppt,所以弄了俩。内容写的很简单,应该能看懂。
分享到:
相关推荐
此代码短小精焊。 想当年,第一次写这个汉诺塔代码,可真把我难坏了。
import java.awt.*; import java.awt.event.*; public class HannoiWindow extends JFrame implements ActionListener{ Tower tower=null; int amountOfDisc=3; char []towerName={'A','B','C'}; JMenuBar bar; ...
汉诺塔是一个经典的递归问题,它源自印度的一个古老传说,涉及三个柱子和一堆不同大小的圆盘。目标是将所有圆盘从一个柱子(起点)移动到另一个柱子(终点),遵循以下规则: 1. 每次只能移动一个圆盘。 2. 不允许...
// a是要移动的位置,b是辅助位置,c是终点 // 如果有n个,那么前面n-1个都要先放到b去,所以第一步是hanNuo(n-1, a, c, b); // 然后第n个做下简单的移动a->c // 但是移动没完成,这时候仅仅是最长的移到c了,其他的...
总的来说,汉诺塔Java实现是一个很好的实践案例,展示了如何使用递归解决复杂问题,以及如何在Java环境中创建简单的用户界面。这个项目可以帮助学习者理解递归算法的工作原理,同时也能提升他们在面向对象编程和GUI...
Applet是Java的一种早期GUI组件,允许在Web浏览器中执行Java代码。 ```java public class HanoiTowerApplet extends Applet { public void init() { // 初始化并调用汉诺塔的逻辑 moveTower(n, 'A', 'C', 'B'); ...
编写Java汉诺塔源代码时,我们需要定义一个方法,该方法接收三个参数:起始柱、目标柱和辅助柱,然后根据盘子的数量进行递归操作。 接下来,我们转向J2ME(Java 2 Micro Edition),这是一个用于开发移动设备和...
根据提供的文件信息,我们可以分析并总结出以下与“汉诺塔演示程序 Java程序源代码”相关的知识点: ### 1. 汉诺塔问题简介 汉诺塔(Hanoi Tower)是一个经典的递归问题,源自一个古老的传说。传说中,在世界末日...
### JAVA图形界面程序——汉诺塔演示程序代码 #### 概述 本篇文章将详细介绍一个用Java语言编写的汉诺塔问题的图形界面演示程序。汉诺塔问题是一种经典的递归算法实例,常用于教授递归思想。在这个程序中,我们将...
在本项目中,"汉诺塔 Java版(可实现鼠标拖动和自动演示)",开发者不仅实现了基础的汉诺塔问题的解决方案,还增加了交互性的功能,让用户可以通过鼠标拖动盘子进行操作,这涉及到Java图形用户界面(GUI)的设计。...
在Java中实现汉诺塔的界面,我们可以使用图形用户界面(GUI)库,如Java Swing或JavaFX。Eclipse是一款广泛使用的Java集成开发环境,可以方便地创建和管理这样的项目。 首先,我们需要创建一个Java项目,然后在`src...
在Java编程中实现汉诺塔问题,我们可以深入理解递归的思想以及如何在实际代码中应用它。本篇文章将详细解析汉诺塔问题的背景、算法原理以及如何用Java语言实现。 1. 汉诺塔问题介绍: 汉诺塔问题由三个柱子组成,...
在Java编程中实现汉诺塔游戏,我们可以采用递归算法来解决这个问题。 首先,我们需要创建一个Java程序,它包含一个主类,例如`HanoiTower`,在这个类中我们将定义汉诺塔游戏的核心逻辑。在`HanoiTower`类中,我们...
汉诺塔的Java实现通常会使用递归算法,递归函数的基本思路是: - 如果只有1个圆盘,直接从起始柱移动到目标柱。 - 对于n个圆盘,首先将上面n-1个圆盘从起始柱通过目标柱移动到辅助柱。 - 然后将第n个圆盘从起始柱...
汉诺塔是一个经典的递归问题,它通过Java编程语言实现能帮助学习者深入理解面向对象编程的概念和递归算法的应用。在这个课程设计中,学生将使用Java语言开发一个图形用户界面(GUI)来模拟汉诺塔游戏。 1. **设计...
下面是一个简单的Java代码示例: ```java public class HanoiTower { public static void moveDisks(int n, char fromRod, char interRod, char toRod) { if (n > 0) { // 递归地将较大的盘子从fromRod移到...
汉诺塔游戏的解法可以用递归算法来表示,这也是一个很好的编程实践案例,尤其适用于学习Java编程的学生进行课程设计。 在Java平台上实现汉诺塔游戏,首先需要理解基础的面向对象编程概念,如类、对象、封装、继承和...
汉诺塔是一个经典的递归问题,...通过阅读代码,我们可以看到如何将理论的汉诺塔算法与Java GUI编程结合在一起,实现了一个交互式的汉诺塔游戏。这对于学习Java编程、递归算法以及图形用户界面设计都是很好的实践案例。
运行这段代码,你会看到Java控制台打印出每一步的操作,模拟了实际的汉诺塔操作过程。 此外,汉诺塔问题的解法还可以扩展到可视化演示,例如创建一个图形界面或动画,让玩家能够直观地看到盘子的移动。在提供的...