分治思想解决汉诺塔的问题

/**
 * 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);


        }
    }

}

 

你可能感兴趣的:(数据结构,java,分治算法)