汉诺塔问题
下面是汉诺塔问题:
汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。
大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。
并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。
问应该如何操作?
汉诺塔问题用递归来求解相对好做一点,不然的话,相对比较棘手,
1:我们可以思考我们目的是把所有的盘子弄到第三个柱子上,最后一个盘子就是第n个盘子必须是在第一个柱子和第三个柱子都空着的时候才能转过去。
2:因此我们必须把n-1个盘子先全部转到第二个柱子上,然后,把第n个盘子转到第三个柱子上,现在第一个柱子是空着的,**接着把第二个柱子上的n-1个盘子经过第一个柱子全部转到第三个柱子上,**这就是基本的思想。
public class TestDemo {
int n;
char start;
char middle;
char end;
public void hannuo(int n,char start,char middle,char end){
this.n=n;
this.start=start;
this.middle=middle;
this.end=end;
if(n==1){
move(start,end);
}
else{
hannuo(n-1,start,end,middle); //这就是递归
move(start,end);
hannuo(n-1,middle,start,end);
}
}
public void move(char start,char end){
System.out.println(start+"->"+end); //这个方法就是求把盘子从第一个柱子转到第三个柱子
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("你有几个盘子:");
int n=in.nextInt();
TestDemo test=new TestDemo();
test.hannuo(n,'a','b','c');
}
}
这就是汉诺塔关于java的代码。