import java.util.Stack;
public class HanNuoTa {
public static void main(String[] args){
HanNuoTa hnt = new HanNuoTa(6);
}
public HanNuoTa(int count){
this.count = count;
// try{
// fout = new FileOutputStream("store.txt");
// writer = new OutputStreamWriter(fout,"UTF-8");
hanNuoTa(count,'A','B','C',0);
//hanNuoTa_stack(count,'A','B','C',0);
// writer.close();
// fout.close();
// }catch(Exception e){
// e.printStackTrace();
// }
}
/**
*
* @param n 汉诺塔的规模n
* @param start 汉诺塔的起点
* @param transit 汉诺塔的中转节点
* @param destination 汉诺塔的终点
* @param level 迭代的深度,初始深度为0
*/
private void hanNuoTa(int n,char start,char transit,char destination,int level){
if(n == 1){
move(n,start,destination);
return;
}
level++;
hanNuoTa(n-1,start,destination,transit,level);
move(n,start,destination);
hanNuoTa(n-1,transit,start,destination,level);
}
private class Element{
public int n,level;
public char start,transit,destination;
public Element(int n,char start,char transit,char destination,int level){
this.n = n;
this.start = start;
this.transit = transit;
this.destination = destination;
this.level = level;
}
}
private void hanNuoTa_stack(int n,char start,char transit,char destination,int level){
Stack<Element> stack = new Stack();
stack.push(new Element(n,start,transit,destination,level));
while(!stack.empty()){
Element e = stack.pop();
if(e.n == 1){
move(e.start,e.destination);
}else{
stack.push(new Element(n-1,e.transit,e.start,e.destination,level));
move(e.start,e.destination);
stack.push(new Element(n-1,e.start,e.destination,e.transit,level));
}
e = null;
}
}
/**
* 显示效果:
* move 1 from A to B
* move 2 from A to C
* @param mark 节点的标识或名称
* @param start 移动的起点标识或名称
* @param destination 移动的终点标识或名称
*/
private void move(int mark,char start,char destination){
StringBuffer sb = new StringBuffer();
sb.append("move ");
sb.append(mark);
sb.append(" from ");
sb.append(start);
sb.append(" to ");
sb.append(destination);
sb.append("\r\n");
System.out.print(sb.toString());
// try{
// writer.write(sb.toString());
// }catch(Exception e){
// e.printStackTrace();
// }
sb.delete(0,sb.length());
}
private void move(char start,char destination){
StringBuffer sb = new StringBuffer();
sb.append("move ");
sb.append("the top disk from ");
sb.append(start);
sb.append(" to ");
sb.append(destination);
sb.append("\r\n");
System.out.print(sb.toString());
sb.delete(0,sb.length());
}
// private Writer writer;
// private FileOutputStream fout ;
private int count;//初始规模
}
分享到:
相关推荐
用递归算法实现的汉诺塔,用的是java,没什么技巧性,初学者可参考一下
现在我们用Java来实现汉诺塔。主要思路是通过递归函数来解决。我们定义一个方法`moveTower`,接收三个参数:源柱、目标柱和辅助柱。这个方法的目的是将源柱上的所有盘子移到目标柱,同时利用辅助柱来避免违反汉诺塔...
在Java中实现汉诺塔,通常会用到递归算法,因为问题的本质适合这种解决方式。具体步骤如下: 1. **基础情况**:当汉诺塔只有一个圆盘时,直接将其从起始柱移动到目标柱。 2. **递归步骤**:对于n个圆盘,首先将n-1...
用java实现汉诺塔程序,输出移动到第n步时,各处的状态
在Java中实现汉诺塔的界面,我们可以使用图形用户界面(GUI)库,如Java Swing或JavaFX。Eclipse是一款广泛使用的Java集成开发环境,可以方便地创建和管理这样的项目。 首先,我们需要创建一个Java项目,然后在`src...
以下是一个简单的Java程序来实现汉诺塔问题的解决方案: ```java public class Hanoi { public static void moveTower(int n, char from, char inter, char to) { if (n == 1) { // 基本情况:只剩一个盘子时,...
在Java中实现汉诺塔,我们需要理解递归的思想,并利用Java的面向对象特性来创建图形用户界面(GUI)以呈现游戏过程。 首先,让我们深入理解汉诺塔游戏规则:汉诺塔有三根柱子,分别标记为A、B、C。A柱上按大小顺序...
总的来说,汉诺塔Java实现是一个很好的实践案例,展示了如何使用递归解决复杂问题,以及如何在Java环境中创建简单的用户界面。这个项目可以帮助学习者理解递归算法的工作原理,同时也能提升他们在面向对象编程和GUI...
总的来说,这个"JAVA实现汉诺塔自动演示"的项目是一个结合了基础数据结构、递归算法、事件驱动编程以及图形用户界面设计的实例。通过这个项目,学习者可以深入理解Java语言的多方面特性和编程技巧,同时对递归算法有...
在Java中实现汉诺塔游戏,主要涉及到递归算法的应用。汉诺塔问题的解决方案可以通过将大问题分解为小问题来解决,也就是将n个圆盘从起始柱A通过中间柱B移动到目标柱C的过程可以分为三步: 1. **将n-1个圆盘从A移动...
下面详细介绍如何使用Java实现汉诺塔问题。 1. **定义基本类**:首先,我们可以定义一个类来表示汉诺塔游戏的基本操作。 2. **递归函数设计**:设计一个递归函数来完成盘子的移动。该函数接收四个参数:要移动的...
Java版汉诺塔的可视化实现,界面更具有可视性!
Java代码实现汉诺塔问题如下: ```java public class HanoiTower { public static void hanoi(int n, char fromRod, char interRod, char toRod) { if (n >= 1) { hanoi(n - 1, fromRod, toRod, interRod); ...
在Java编程中实现汉诺塔的演示程序,可以帮助理解递归算法和问题解决策略。下面将详细阐述这个Java版汉诺塔演示程序的相关知识点。 1. **汉诺塔问题描述** 汉诺塔问题由三根柱子(A、B、C)和若干个大小不一的圆盘...
编写一个图形程序模拟汉诺塔的搬动过程。要求:图形界面程序,画出三个柱子上的圆盘,正视图;每搬动一次,重绘图形,就是以动画方式展示。圆盘数量4个。
在实现汉诺塔时,可能会使用到观察者模式(Observer Pattern),让`HannoiWindow`作为观察者,监听`Tower`或`AutoMoveDisc`的状态变化,从而实时更新界面。 6. **异常处理**: 在实际编程中,为了保证程序的健壮...
以下是一个基于Eclipse的Java汉诺塔实现的详细步骤和知识点: **1. 创建Java项目** 首先,在Eclipse中创建一个新的Java项目。点击"File" -> "New" -> "Java Project",输入项目名称,例如"汉诺塔",然后点击"Finish...
总的来说,Java程序设计中的汉诺塔问题不仅展示了递归算法的应用,还涉及了GUI设计、多线程和定时器的使用,这些都是Java开发中非常重要的技能。通过这个玩家游戏,开发者不仅可以锻炼逻辑思维能力,还可以提升GUI...
Java实现汉诺塔游戏
在"标签"中提到了"java"和"汉诺塔",这再次确认了我们要用Java来实现汉诺塔回溯算法。在编写Java程序时,我们可能会创建一个`HanoiTower`类,它包含表示盘子的属性和执行移动操作的方法。例如,`moveDisk()`方法可以...