目录
题目:
有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子C上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,请问移动方案是什么?
程序分析:
如果该塔为h层,我们看成两部分,下面一个和上面所有的即为(h -1),我们先将上面所有(h-1)由a移动到b上,下面那个一个由a移动到c上,然后将b上的借助a移动到c上面.每次实现都使用moveTower方法实现。
代码实现:
public class HanoiTower{
public static void main (String[] args){
Tower tower = new Tower();
tower.moveTower(3,'A','B','C');
}
}
class Tower{
//无返回值
// int h 接受几层的汉诺塔, char a,b,c 用于记录移动的轨迹,要求从a 到 c
public void moveTower(int h , char a , char b ,char c){
//递归结束条件 如果该塔为1层
if(h == 1){
System.out.println(a + "->"+ c);//一层的话直接从a到c
}else{
//无论该塔多少层,我们看成两部分,下面一个和上面所有(h -1),我们先将上面所有由a移动到b上
//下面那个一个由a移动到c上,然后将b上的借助a移动到c上面
moveTower( h-1, a, c, b);
System.out.println(a + "->" + c);
moveTower(h-1, b, a, c);
// System.out.println(b + "->" + c);
}
}
}
代码效果:
我们假设该汉诺塔为3层,看代码实现的实际移动路线。
画图实现一下: