Java 算法分析 分治算法解决汉诺塔

在这里插入图片描述
在这里插入图片描述

汉诺塔:
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

猜你喜欢

转载自blog.csdn.net/m0_45196258/article/details/107885132