汉诺塔问题介绍:
在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片,一次只移动一片,不管在哪根针上,小片必在大片上面。当所有的金片都从梵天穿好的那根针上移到另外一概针上时,世界就将在一声霹雳中消灭,梵塔、庙宇和众生都将同归于尽。
问题分析:
当n=1时:A > C
当n=2时:A > B
A > C
B > C
实现这个算法可以简单分为三个步骤(递归思想):
(1) 把n-1个盘子由A 移到 B;
(2) 把第n个盘子由 A移到 C;
(3) 把n-1个盘子由B 移到 C;
实现代码:
package com.suanfa.test;
import java.util.Scanner;
/*汉诺塔问题*/
public class HanoiTower {
public static void main(String[] args) {
// TODO Auto-generated method stub
while (true) {
System.out.print("请输入要移动的盘子个数:");
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
hanoi(n,'A','B','C');
}
}
public static void hanoi(int n,char A,char B,char C) {
if (n==1) {
System.out.println("盘子1从"+A+"到"+C);
}
else {
hanoi(n-1,A,C,B);
System.out.println("盘子"+n+"从"+A+"到"+C);
hanoi(n-1,B,A,C);
}
}
}