汉诺塔游戏:
汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
#背景介绍
法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。
解题思路:
1-N从A移动到B,C作为辅助
等价于:
1. 1~N-1从A移动到C,B作为辅助
2. 把N从A移动到B
3. 1~N-1从C移动到B,A做为辅助
package com.miao.day02;
//汉诺塔
public class TowerOfHanoi {
public TowerOfHanoi() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
printHanoi(2,"A","B","C");
}
/*
* n :初始n个从小到大盘子
* from:原始柱子
* help:辅助柱子
* to:目标柱子
*/
static void printHanoi(int n,String from,String to,String help) {
if(n == 1) {
System.out.println("move " + n + " from " + from + "to " + to);
}else {
printHanoi(n - 1,from,help,to);//先将n-1个盘子移到辅助空间(c盘)去
//将n移动到目标位置(b盘)
System.out.println("move " + n + " from " + from + "to " + to );
printHanoi(n - 1,help,to,from);//再将n-1移到原始柱子(a盘)
}
}
}