【Java】汉诺塔问题

原创 2015年07月10日 16:39:59
import java.util.Stack;


public class Tower {
	private Stack<Integer> disks;
	private int index;
	public Tower(int i) {
		disks = new Stack<Integer>();
		index = i;
	}
	
	public int index() {
		return index;
	}
	
	public void add(int d) {
		if (! disks.isEmpty() && disks.peek() <= d) {
			System.out.println("Error place in disk" + d);
		}
		else {
			disks.push(d);
		}
	}
	
	public void moveTopTo(Tower t) {
		int top = disks.pop();
		t.add(top);
		System.out.println("Move disk " + top + " from " + index() + " to "+ t.index());
	}
	
	public void moveDisks(int n, Tower destination, Tower buffer) {
		if (n > 0) {
			moveDisks(n-1, buffer, destination);
			moveTopTo(destination);
			buffer.moveDisks(n - 1, destination, this);
		}
	}
}

public static void main(String[] args) {
	int n = 3;
	Tower[] towers = new Tower[n];
	for (int i = 0; i <3; i++) {
		towers[i] = new Tower(i);
	}
	
	for (int i = n-1; i >= 0; i--) {
		towers[0].add(i);
	}
	
	towers[0].moveDisks(n,  towers[2], towers[1]);
}

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

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

Java 递归实现汉诺塔问题

汉诺塔问题就是:有ABC三根柱子,A柱子上从上到下摞了很多体积依次递增的圆盘,如果将圆盘从A移动到C柱子,且依然保持从上到下依次递增。 class Hanio{ public void moveO...
  • lingzhm
  • lingzhm
  • 2015-04-10 21:47:42
  • 2491

栈和队列——用栈来求解汉诺塔问题(非递归)(java实现)

【题目】   汉诺塔问题比较经典,这里修改一下游戏规则:现在限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移动到最左侧,而是必须经过中间。求当塔有N层的时候,打印最优移动过程和最优移动总步...
  • qq_39776901
  • qq_39776901
  • 2017-09-06 13:17:02
  • 367

java中使用递归求解汉诺塔问题

最近帮朋友编写了一段代码,主要原理就是和解决汉诺塔问题类似,下面就开以此来讲解一下汉诺塔问题。 问题描述如下: 古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在...
  • w_y_loong
  • w_y_loong
  • 2012-07-15 21:14:16
  • 6382

分治算法_汉诺塔问题_Java实现

什么是分治算法?就是将一个难以解决的大问题,分割成一些规模较小并且相对独立的相同问题,以便各个击破,分而治之。...
  • ljmingcom304
  • ljmingcom304
  • 2015-12-14 16:36:45
  • 1057

四柱汉诺塔

四柱汉诺塔变体汉诺塔 问题描述:在经典汉诺塔的基础上加一个条件,即,如果再加一根柱子(即现在有四根柱子a,b,c,d),计算将n个盘从第一根柱子(a)全部移到最后一根柱子(d)上所需的最少步数...
  • liangzhaoyang1
  • liangzhaoyang1
  • 2016-02-27 18:50:43
  • 1400

数据结构Java实现——①栈-->栈的应用四、汉诺塔问题

汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序...
  • u011446177
  • u011446177
  • 2015-01-04 12:52:32
  • 971

用JAVA编写汉诺塔程序

汉诺塔问题:三根坚柱和一组中间有洞能在柱子上滑动的盘子,每个盘子有不同的直径。初始时,所有的盘子按照大小依次堆放在一个柱子上,最大的盘子在最下面。 目标:将所有的盘子从初始的第一根柱子移动到第三根柱...
  • peng_peng123
  • peng_peng123
  • 2016-01-10 11:32:00
  • 786

一道汉诺塔的题目变形求解

今天在看算法题目时,做了一个汉诺塔的题目,描述如下: 对于传统的汉诺塔游戏我们做一个拓展,我们有从大到小放置的n个圆盘,开始时所有圆盘都放在左边的柱子上,按照汉诺塔游戏的要求我们要把所有的圆...
  • yefengzhichen
  • yefengzhichen
  • 2015-07-22 22:36:43
  • 1260

汉诺塔的两种非递归解法

如同我们能求出fabonacci数列的表达式,一定能用归纳的办法解决hanoi问题。1 基本规律:        最容易看出的规律就是盘子移动的序列:给盘子从小到大编号1,2,……,N,试验移动盘子则...
  • hdy007
  • hdy007
  • 2007-03-06 13:29:00
  • 1324
收藏助手
不良信息举报
您举报文章:【Java】汉诺塔问题
举报原因:
原因补充:

(最多只允许输入30个字)