实现思想
汉诺塔:有三个柱子,A柱,B柱,C柱。只有A柱子上有若干个盘,盘子从大到小向上叠在A柱上,要求将A柱上的盘子移动到C柱上,且小盘上不能有大盘。
实现:
- 若A柱上只有一个盘子,则直接将A柱移动到C柱即可。
- 若A柱不只一个,则可看出两个盘子,最底下的大盘和大盘之上的若干盘。
- 将多盘问题化为两个盘子问题之后,可先将小盘借助C柱子移动到B柱子
- 将最底下大盘直接移动到C柱子
- 再将B柱子所有盘借助A柱子移动到C柱子
代码实现
public class HanoiTower{
public static void main(String[] args) {
Tower tower = new Tower();
tower.move(5,'A','B','C');
}
}
class Tower{
//num:移动的个数,abc表示三个塔柱,将a塔盘子借助b塔移动到c塔
public void move(int num,char a, char b,char c){
//如果只有一个盘 num=1
if(num==1){
System.out.println(a+"->"+c);
}else{
//如果有多个盘,可以看出两个盘,最下面的一个盘和除最后一个之外的所有盘
//1. 先移动上面所有盘到b,借助c
move(num-1,a,c,b);
//2. 把下面的盘移动到c
System.out.println(a+"->"+c);
//3. 再把b塔的所有盘移动到c,借助a
move(num-1,b,a,c);
}
}
}