1 介绍
2 分治算法的基本步骤
3 分治算法设计模式
4 分治算法实践——汉诺塔
汉诺塔思路分析:
代码:
public class Hanoitower {
public static void main(String[] args) {
hanoiTower(5, 'A', 'B', 'C');
}
//汉诺塔的移动方案
//使用分治算法
//把所有盘a-->c 移动过程使用到b
public static void hanoiTower(int num, char a, char b, char c) {
//如果只有一个盘
if (num == 1) {
System.out.println("第1个盘从" + a + "->" + c);
} else {
//如果n>=2,我们总是可以看做是两个盘 1.最下面的一个盘 2.上面的所有盘
//1.先把最上面的盘a->b,移动过程使用到c
hanoiTower(num - 1, a, c, b);
//2.把最下面的盘a->c
System.out.println("第" + num + "个盘从" + a + "->" + c);
//3.把b塔的所有盘移动到c,移动过程使用到a
hanoiTower(num - 1, b, a, c);
}
}
}
运行结果:
第1个盘从A->C
第2个盘从A->B
第1个盘从C->B
第3个盘从A->C
第1个盘从B->A
第2个盘从B->C
第1个盘从A->C
第4个盘从A->B
第1个盘从C->B
第2个盘从C->A
第1个盘从B->A
第3个盘从C->B
第1个盘从A->C
第2个盘从A->B
第1个盘从C->B
第5个盘从A->C
第1个盘从B->A
第2个盘从B->C
第1个盘从A->C
第3个盘从B->A
第1个盘从C->B
第2个盘从C->A
第1个盘从B->A
第4个盘从B->C
第1个盘从A->C
第2个盘从A->B
第1个盘从C->B
第3个盘从A->C
第1个盘从B->A
第2个盘从B->C
第1个盘从A->C
第1个盘从A->C
第2个盘从A->B
第1个盘从C->B
第3个盘从A->C
第1个盘从B->A
第2个盘从B->C
第1个盘从A->C