/*汉诺塔非递归实现--利用栈
* 1.创建一个栈,栈中每个元素包含的信息:盘子编号,3个塔座的变量
* 2.先进栈,在利用循环判断是否栈空,
* 3.非空情况下,出栈,检查是否只有一个盘子--直接移动,否则就模拟前面递归的情况--非1的情况
* 4.直到栈空就结束循环,就完成全部的移动。
* */
class Stack11{
Towers[] tt = new Towers[20];
int top = -1; public boolean isEmpty(){
return top == -1;
} public void push(Towers t){
tt[++top] = t;
} public Towers pop(){
return tt[top--];
}
} class Towers{
int diskN;
char from;
char inter;
char to;
public Towers(int diskN, char from, char inter, char to) {
this.diskN = diskN;
this.from = from;
this.inter = inter;
this.to = to;
} } public class HannoTower_Stack { public static void main(String[] args) {
Towers t1 = new Towers(3,'A','B','C');
doTowers(t1);
} private static void doTowers(Towers t1) {
Stack11 stack = new Stack11();
stack.push(t1);
while(!stack.isEmpty()){
Towers temp = stack.pop();
//处理是一个盘子的情况--所有打印语句都从这里打印
if(temp.diskN == 1){
System.out.println("Top disk " + "from " + temp.from + " to " + temp.to);
}
//注意处理移动的顺序本来是A-C-B,A-B-C,B-A-C.所以进栈的顺序相反
else{
stack.push(new Towers(temp.diskN-1,temp.inter,temp.from,temp.to));
stack.push(new Towers(1,temp.from,temp.inter,temp.to));
stack.push(new Towers(temp.diskN-1,temp.from,temp.to,temp.inter));
}
} } }

执行结果:

Top disk from A to C
Top disk from A to B
Top disk from C to B
Top disk from A to C
Top disk from B to A
Top disk from B to C
Top disk from A to C

最新文章

  1. 在MVC控制器里面使用dynamic和ExpandoObject,实现数据转义的输出
  2. [转]spring beans.xml
  3. oledbdataadapter 读取excel数据时,有的单元格内容不能读出
  4. 智能车学习(四)—— Cmp学习
  5. linqPad帮助你快速学习LINQ
  6. Hibernate,JPA注解@Version
  7. git入门超详细(转载)
  8. 28 Corn表达式详解 (转自http://blog.csdn.net/claram/article/details/51785193)
  9. Java基础笔记8
  10. Linux服务器断电导致挂载及xfs文件损坏的修复方法
  11. (最简单)红米手机5A的USB调试模式在哪里开启的方法
  12. Pyhon学习笔记-基础3
  13. 利用IntelliJ IDEA 创建第一个项目
  14. Android系统分区理解及分区目录细解【转】
  15. hdu-6333-莫队
  16. 【AMQ】之概述
  17. 20155223 Exp7 网络欺诈防范
  18. js中call与apply用法
  19. [解决问题]selenium.remote.UnreachableBrowserException 异常分析并解决问题
  20. 自动批改android模拟器的imei的小程序 和 下载各个版本SDK Tools及ADT

热门文章

  1. Ribbon/Feign/Zuul retry
  2. 转 一次完整地http请求
  3. Spark-2.3.2【SparkStreaming+SparkSQL-实时仪表盘应用】
  4. java===java基础学习(8)---静态域与静态方法
  5. nfs 文件共享 服务
  6. android studio 64位手机+Fresco引起的在arm64位机器上找不到对应的so库
  7. 初学jmeter
  8. ActiveMQ基于JMS的pub/sub传播机制
  9. 给定一列数字将其平移n位
  10. JAVA用POI读取和创建2003和2007版本Excel