运用分支算法思想,不管有多少个盘,只看作最下面的一个盘和上面的所有盘,总共看作两个盘。
* 括号里的柱子参数不代表每根柱子的位置,
* 而是功能,比如第一个参数的柱子是存放原盘的,
* 第二个参数是辅助柱子,第三个参数是目标柱子
package 十大算法; public class 分治算法汉诺塔问题 { public static void main(String[] args) { han(3,'A','B','C'); } public static void han(int num,char a,char b,char c) { //如果只有一个盘 if(num==1) { System.out.println("第1个盘从 "+ a+"->"+c); } else { //如果有num>=2的情况,总是可以看作是两个盘, //1、最下边是一个盘,2、上面的所有盘 //1. 先把最上面的所有盘A->B,移动过程中会使用到c han(num-1,a,c,b); //2. 把最下边的盘A->C System.out.println("第"+num+"个盘从 "+a+"->"+c); //3.把B塔的所有盘从B->C,移动过程使用A 塔 han(num-1,b,a,c); } } }