汉诺塔

来源:互联网 发布:软件测试就业好不好 编辑:程序博客网 时间:2024/06/07 08:45

汉诺塔(河内塔):河内塔是根据一个传说形成的一个问题:有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小(意思就是大盘子不能移到小盘子的上方)。要求按下列规则将所有圆盘移至C杆:提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须尊循上述两条规则!

这种算法含有递归的思想,假如我们有n个盘子,整体看我们只要把n-1个盘子首选从A移动到临时盘子B上去即可(即使盘子每次只能够移动一次,这具体n-1个怎么移动,我们不要研究,计算机会帮助我们做完这件事情,我们只看整体,通过递归的思想完成即可),然后把最后一个盘子从A移动到C(目标盘子上),然后把n-1个盘子从B移动C盘子上即可,我们就完成了此算法的解题思路了!

下面给出参考代码:

package javastudy;


public class Testit10 {


public static void main(String[] args) {
// 汉诺塔
hanoi(3, "A", "B", "C");//调用函数


}
     //体现的是一种递归的思想
static void hanoi(int n, String src, String mid, String dest) {
if (n == 1) {
System.out.println(src + "-->" + dest);//最后都会回到输出这里的

else {
hanoi(n - 1, src, dest, mid);//记住此规律即可
hanoi(1, src, mid, dest);//这里的mid也可以不写,写成这样也行""
hanoi(n - 1, mid, src, dest);//具体的n-1个数字怎么挪动的我们不要管,我们只要知道整体怎么移动就行
}


}
}


输出结果样例:

A-->C
A-->B
C-->B
A-->C
B-->A
B-->C
A-->C




0 0
原创粉丝点击