`
javaG
  • 浏览: 554692 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

用Java实现汉诺塔

    博客分类:
  • java
阅读更多
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,没什么技巧性,初学者可参考一下

    用JAVA实现的汉诺塔

    现在我们用Java来实现汉诺塔。主要思路是通过递归函数来解决。我们定义一个方法`moveTower`,接收三个参数:源柱、目标柱和辅助柱。这个方法的目的是将源柱上的所有盘子移到目标柱,同时利用辅助柱来避免违反汉诺塔...

    java实现汉诺塔演示及手动操作汉诺塔

    在Java中实现汉诺塔,通常会用到递归算法,因为问题的本质适合这种解决方式。具体步骤如下: 1. **基础情况**:当汉诺塔只有一个圆盘时,直接将其从起始柱移动到目标柱。 2. **递归步骤**:对于n个圆盘,首先将n-1...

    java实现汉诺塔程序

    用java实现汉诺塔程序,输出移动到第n步时,各处的状态

    java实现界面-汉诺塔

    在Java中实现汉诺塔的界面,我们可以使用图形用户界面(GUI)库,如Java Swing或JavaFX。Eclipse是一款广泛使用的Java集成开发环境,可以方便地创建和管理这样的项目。 首先,我们需要创建一个Java项目,然后在`src...

    Java实现汉诺塔递归算法详解

    以下是一个简单的Java程序来实现汉诺塔问题的解决方案: ```java public class Hanoi { public static void moveTower(int n, char from, char inter, char to) { if (n == 1) { // 基本情况:只剩一个盘子时,...

    java实现汉诺塔

    在Java中实现汉诺塔,我们需要理解递归的思想,并利用Java的面向对象特性来创建图形用户界面(GUI)以呈现游戏过程。 首先,让我们深入理解汉诺塔游戏规则:汉诺塔有三根柱子,分别标记为A、B、C。A柱上按大小顺序...

    汉诺塔Java实现

    总的来说,汉诺塔Java实现是一个很好的实践案例,展示了如何使用递归解决复杂问题,以及如何在Java环境中创建简单的用户界面。这个项目可以帮助学习者理解递归算法的工作原理,同时也能提升他们在面向对象编程和GUI...

    JAVA实现汉诺塔自动演示

    总的来说,这个"JAVA实现汉诺塔自动演示"的项目是一个结合了基础数据结构、递归算法、事件驱动编程以及图形用户界面设计的实例。通过这个项目,学习者可以深入理解Java语言的多方面特性和编程技巧,同时对递归算法有...

    java实现汉诺塔小游戏

    在Java中实现汉诺塔游戏,主要涉及到递归算法的应用。汉诺塔问题的解决方案可以通过将大问题分解为小问题来解决,也就是将n个圆盘从起始柱A通过中间柱B移动到目标柱C的过程可以分为三步: 1. **将n-1个圆盘从A移动...

    java编写的汉诺塔

    下面详细介绍如何使用Java实现汉诺塔问题。 1. **定义基本类**:首先,我们可以定义一个类来表示汉诺塔游戏的基本操作。 2. **递归函数设计**:设计一个递归函数来完成盘子的移动。该函数接收四个参数:要移动的...

    Java版汉诺塔(可视化)

    Java版汉诺塔的可视化实现,界面更具有可视性!

    Java语言汉诺塔自动演示

    Java代码实现汉诺塔问题如下: ```java public class HanoiTower { public static void hanoi(int n, char fromRod, char interRod, char toRod) { if (n &gt;= 1) { hanoi(n - 1, fromRod, toRod, interRod); ...

    java版汉诺塔演示

    在Java编程中实现汉诺塔的演示程序,可以帮助理解递归算法和问题解决策略。下面将详细阐述这个Java版汉诺塔演示程序的相关知识点。 1. **汉诺塔问题描述** 汉诺塔问题由三根柱子(A、B、C)和若干个大小不一的圆盘...

    java实现汉诺塔的搬动

    编写一个图形程序模拟汉诺塔的搬动过程。要求:图形界面程序,画出三个柱子上的圆盘,正视图;每搬动一次,重绘图形,就是以动画方式展示。圆盘数量4个。

    自己用java做的汉诺塔

    在实现汉诺塔时,可能会使用到观察者模式(Observer Pattern),让`HannoiWindow`作为观察者,监听`Tower`或`AutoMoveDisc`的状态变化,从而实时更新界面。 6. **异常处理**: 在实际编程中,为了保证程序的健壮...

    eclipse实现汉诺塔汉诺塔

    以下是一个基于Eclipse的Java汉诺塔实现的详细步骤和知识点: **1. 创建Java项目** 首先,在Eclipse中创建一个新的Java项目。点击"File" -&gt; "New" -&gt; "Java Project",输入项目名称,例如"汉诺塔",然后点击"Finish...

    Java 程序设计 可视化汉诺塔问题 玩法演示 玩家游戏

    总的来说,Java程序设计中的汉诺塔问题不仅展示了递归算法的应用,还涉及了GUI设计、多线程和定时器的使用,这些都是Java开发中非常重要的技能。通过这个玩家游戏,开发者不仅可以锻炼逻辑思维能力,还可以提升GUI...

    Java实现汉诺塔游戏.doc

    Java实现汉诺塔游戏

    java汉诺塔小游戏

    在"标签"中提到了"java"和"汉诺塔",这再次确认了我们要用Java来实现汉诺塔回溯算法。在编写Java程序时,我们可能会创建一个`HanoiTower`类,它包含表示盘子的属性和执行移动操作的方法。例如,`moveDisk()`方法可以...

Global site tag (gtag.js) - Google Analytics