/**
* 汉诺塔问题
*
* 精确计算出到底需要移动多少次才能够将汉诺塔从柱子A搬到柱子B(柱子C作缓冲)
* 输入:汉诺塔的层次数
* 输出:移动次数和移动动作
* 思路:递归
* 使用:直接在main函数new Test(汉诺塔的层次数)
*
* @author Fiay
*
*/
public class Test {
private static String a = "柱子A";
private static String b = "柱子B";
private static String c = "柱子C";
private int level;
private int turns;
/*省略Getter and Setter*/
public Test(){}
public Test(int level){
this.level = level;
this.turns = getTurnsByLevel(this.level);
System.out.println("完成!\n共需要"+turns+"步");
}
public int getTurnsByLevel(int level){
System.out.println("汉诺塔层次数为:"+level+"\n开始!");
showSolution(level,a,b,c);
return turns-1;
}
public void showSolution(int level,String a,String b,String c){
if(level>0){
showSolution(level-1,a,c,b);
System.out.println(turns+" - 从("+a+")移到("+b+")\t");
showSolution(level-1,c,b,a);
}else{
turns++;
}
}
public static void main(String args[]){
new Test(2);
//new Test(3);
//new Test(4);
}
}
分享到:
相关推荐
用C++实现汉诺塔的递归算法,定义了类和方法。
用C语言实现汉诺塔的递归算法,另外还有用栈来实现的方式:http://download.csdn.net/detail/jason19905/6419427
汉诺塔的非递归实现,c++实现的,很简单,只有50多行,从递归的汉诺塔改编而来,将原来递归时的参数状态保存在栈中,入栈代替递归,出栈代替递归返回。
汉诺塔问题的递归算法,附详细代码以及运行结果,有详细的算法描述。
非递归汉诺塔算法,并带有一片武汉大学的算法描述。
汉诺塔非递归算法 用栈作为辅助存储结构 和数据结构中中序遍历二叉树的方法类似
适应于大学生学习算法
用非递归算法,用栈解决问题,C#语言,来解决汉诺塔移动问题
用栈来实现汉诺塔,要明白递归就是栈的重要应用之一,递归是系统自动调用栈来处理。
有三根柱子A,B,C,A柱子上有N个盘子,从小到大依次叠放,要求把A上的盘子都移到C上,B可以作为临时存放,移动的时候必须始终遵循小盘子在大盘子上面,且每次只能移动一个盘子。
汉诺塔问题非递归算法的实现
汉诺塔的非递归实现,估计课后作业应该有的O(∩_∩)O~
//程序实现了mystack栈的声明和定义,并且通过函数 //move_stacks的递归调用和函数move_a_ring实现汉 //诺塔的算法,并用函数print_stacks和pr_chars实现汉诺 //塔的动画效果
本人原创,思路想法里面都有。是根绝一些规律写的非递归,不是用递归改的。
汉诺塔递归算法: 问题抽象 3个塔,n个碟子 初始:所有碟子放在1号塔,大的在底下,小的在上面 任务:把碟子移动到2号塔,顺序不变, 可用3号塔辅助 限制 每次只能移动一个碟子 总是大碟子...
汉诺塔-汉诺塔的非递归实现源码和原理讲解---从网上整理的
网上看来的,比较详细。包含了递归以及不用递归的代码。 C和C++版的都有。
程序设计 汉诺塔算法演示
c++递归实现汉诺塔问题。 算法分析与设计 例题的源码实现。跟书上的一样。
C#汉诺塔(递归调用)