package suanfa10;
public class Hannuota {
private static int count= 0;
public static void main(String[] args) {
char a = 'A';
char b = 'B';
char c = 'C';
int num = 4;
hannuotawenti(num , a , b , c);
System.out.println("一共移动了"+count+"次");
}
//分治算法的设计模式解决汉诺塔问题
/**
* @param num //表示有几个盘
* @param a //盘一开始所在柱
* @param b //中间柱
* @param c //目标柱
*/
public static void hannuotawenti(int num, char a, char b, char c){
count ++;
if (num == 1){
System.out.println("第1个盘从"+a+"->"+c);
}else{
//也就是n>=2的情况
hannuotawenti(num-1, a, c, b); //上面的盘我们改动中间柱和目标柱
System.out.println("第"+num+"个盘从"+a+"->"+c);
hannuotawenti(num-1, b, a, c); //将最后的盘移动过去之后, 要将在b柱上的盘再移动到c柱上
}
}
}
第1个盘从A->B
第2个盘从A->C
第1个盘从B->C
第3个盘从A->B
第1个盘从C->A
第2个盘从C->B
第1个盘从A->B
第4个盘从A->C
第1个盘从B->C
第2个盘从B->A
第1个盘从C->A
第3个盘从B->C
第1个盘从A->B
第2个盘从A->C
第1个盘从B->C
一共移动了15次