汉诺塔:
1.如果有一个盘子,A->C
2.如果有n>=2的情况,我们总是可以看成两个盘子,最下面的一个盘子,上面的为一个盘子。
所以
1先把上面的盘子A->B
2最下面的盘子A->C
3.上面的盘子B->C
package divideandconquer;
/**
* 2020/8/8
* 20:38
*/
public class DivideAndConquer {
static int count=0;
public static void main(String[] args) {
hanoi(3 , 'A', 'B','C');
}
public static void hanoi(int num,char a,char b, char c){
//如果只有一个盘子
if(num==1){
count++;
System.out.println("第"+count+"步:"+"将"+a+"中第"+num+"个盘子放到"+c);
}else{
//n>=2,上面的盘子从a放到b,借助c
hanoi(num-1, a, c,b );
count++;
//将最底下的盘子放到c
System.out.println("第"+count+"步:"+"将"+a+"中第"+num+"个盘子放到"+c);
//将b中的盘子放到c,借助a
hanoi(num-1, b, a, c);
}
}
}
//答案
第1步:将A中第1个盘子放到C
第2步:将A中第2个盘子放到B
第3步:将C中第1个盘子放到B
第4步:将A中第3个盘子放到C
第5步:将B中第1个盘子放到A
第6步:将B中第2个盘子放到C
第7步:将A中第1个盘子放到C