/**
* 1,关于分治算法:
* 2,使用分治思想解决汉诺塔的问题
* 3,解决汉诺塔问题的思路:无论有多少个盘,都可以分成两部分,最下面的1个盘和该盘上面的所有盘(假设这些盘都在A上)。
* step1:将最下面的1个盘上面的所有盘移动到B上。
* step2:将最下面的1个盘移动到C上。
* step3:将B上面的所有盘移动到C上(如何将B上面的盘移动到C上,重复上述步骤即可,不同的仅仅是柱子)
*/
public class Hanoitower {
public static void main(String[] args) {
hanoitower(4,'A','B','C');
}
/**
*
* @param num 盘的数量
* @param a 开始的柱子
* @param b 移动时需要借助的柱子
* @param c 最后放置的柱子
*/
static void hanoitower(int num, char a,char b,char c){
if(num == 1){//如果只有一个盘,那么直接从A移动到C
System.out.println("将第1个盘从:"+a + "->"+ c);
}else{ //如果有多个盘
//将最下面的盘的上面的所有盘从A移动到B,中间需要借助C
hanoitower(num-1,a,c,b);
//将最下面的盘直接从A移动到C
System.out.println("将第"+num+"个盘从:"+a + "->"+ c);
//将B上面的所有盘从B移动到C,中间需要借助A。移动过程仍然是先移动最下面的盘上面的所有盘,再移动最下面的盘。
hanoitower(num-1,b,a,c);
}
}
}