分治算法[汉诺塔问题]

汉诺塔问题 – 分治算法的最佳实践


public class Hannuota {
    
    

    public static void main(String[] args) {
    
    

        hannuota(2, 'A', 'B', 'C');
    }


    /**
     *  汉诺塔问题
     *      从 A 移动到 C
     * @param num  需要移动几个盘子
     * @param a    A 杠
     * @param b    B 杠
     * @param c    C 杠
     */
    public static void hannuota(int num, char a, char b, char c){
    
    
        if(num == 1){
    
    
               System.out.println("第 " + num + "盘子从 " + a + "-->" + c);
        }
        if(num >= 2){
    
    
            // 总的来看,总是可以把汉诺塔看成两个部分
            hannuota(num - 1, a, c, b);  // 意思是将上面的 num - 1 个盘子 从 a  通过 c  移动到 b

            // 将最底下的一个盘子移动到 c
            System.out.println("第 " + num + "盘子从 " + a + "-->" + c);

            // 将 num - 1 个上部分的盘子从 b 移动到 c
            hannuota(num - 1, b, a, c);  // 从 b 通过 a 移动到 c
        }

    }

}

猜你喜欢

转载自blog.csdn.net/qq_43765535/article/details/107744959