此题曾让我纠结好久,其实理解他的关键是把三根柱子分别当成来源柱,中转柱和目标柱,这样就很容易理解它的解法了。
public class MyHanoi {
public static void move(int n,char laiyuan,char zhongzhuan,char mubiao){
if(n==1){
//如果只有一根,直接从来源柱移到目标柱
System.out.println(laiyuan+"-->"+mubiao);
}else{
/*想要把N个盘子从来源柱,移到目标柱,需要先把n-1个盘子从来源柱移到中转柱,
* 再把第n个盘子移到目标柱,在把n-1个盘子移到目标柱
*/
//从来源盘移n-1个盘子到中转盘
move(n-1,laiyuan,mubiao,zhongzhuan);
//从来源盘移第n个盘子到目标盘
System.out.println(laiyuan+"-->"+mubiao);
//把n-1个盘子从中转盘移到来源盘,此时中转盘作来源盘,原来的来源盘用来中转,目标盘不变
move(n-1,zhongzhuan,laiyuan,mubiao);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
char laiyuan='x';//来源柱
char zhongzhuan='y';//中转柱
char mubiao='z';//目标柱
move(64,laiyuan,zhongzhuan,mubiao);
}
}
分享到:
相关推荐
汉诺塔问题汉诺塔问题汉诺塔问题汉诺塔问题汉诺塔问题汉诺塔问题
任意输入N个盘,在三个柱子上实现汉诺塔问题的非递归求解,用栈进行
在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好...故汉诺塔问题又被称为“世界末日问题。”
利用状态空间法对汉诺塔定义状态,用广度优先的方法解决汉诺塔问题,人工智能.(属于学校学习课程所做,非商业内容)
汉诺塔问题C/C++;解决汉诺塔问题的算法;递归
汉诺塔问题
算法分析设计中三柱汉诺塔算法的拓展,四柱汉诺塔的设计算法代码
C++语言递归算法求解原始汉诺塔问题,邻近移动汉诺塔问题,循环移动汉诺塔问题,奇偶汉诺塔问题
汉诺塔问题的动画演示 ___________________________________________________________________________________________________________________________________________________________________________________...
汉诺塔问题 java解决方案汉诺塔问题 java解决方案汉诺塔问题 java解决方案
自己编的汉诺塔问题,用数据结构中的栈编的
汉诺塔问题C语言实现
c++递归实现汉诺塔问题。 算法分析与设计 例题的源码实现。跟书上的一样。
汇编语言中用递归算法实现汉诺塔问题。有X,Y,Z三个柱子和几个大小都不一样且能套进柱子的圆盘(编号为1,2,3,……,N),这N个圆盘已按由大到小的顺序依次套在X柱上,要求将这些圆盘按如下规则由X柱移到Z柱上。 ...
汉诺塔问题是学习 C++的一个难点,本 C++程序非常简单,非常容易理解
网上看来的,比较详细。包含了递归以及不用递归的代码。 C和C++版的都有。
设A、B、C三个塔座,在A上叠加着从大到小的n个圆盘,要求把A上的圆盘移到C上,打印每一个圆盘移动轨迹: 每次只能移动一个圆盘; 任何时刻不允许将大圆盘放在小圆盘之上; 可借助辅助塔B
汉诺塔问题并计算总次数--C++源代码,本资源不仅给出了源代码,还进行了结果分析与比较!