汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
图片来源:http://caterpillar.onlyfun.net/Gossip/AlgorithmGossip/HanoiTower.htm
java实现代码如下:
import javax.swing.JOptionPane;
public class HanoiTemple {
/**
* @param args
*/
public static void main(String[] args) {
String n=JOptionPane.showInputDialog("请输入要移到的盘数:");
HanoiTemple ht=new HanoiTemple();
ht.move(Integer.parseInt(n),'A','B','C');
}
public void move(int n,char a,char b,char c){
if(n==1){
System.out.println("move from "+a+" to "+c);
}else{
move(n-1, a,c,b);
move(1, a, b, c);
move(n-1, b, a, c);
}
}
}
程序用到了递归的思想。当只有1个盘时,只需直接从A移到C即可。
当有2个盘时,过程如下:A>>B A>>C B>>C
总结规律,当n>=2时,
先将上面的 n-1 个盘由 A 借助 C 移到 B
然后最底下的一个大盘由 A 借助 B 移到 C (实际上就是直接从 A 移到 C)
最后将 B 上的 n-1 个盘由 B借助 A 移到 C