题目:如下图所示,从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面,求移动的步骤和移动的次数
思路解析:以n=3为例,将 A 中最上面的圆盘移到 C 中,再将 A 中的第二个圆盘移到 B,再将 C 中的圆盘移到 B 上,再将 A 中的最下面的圆盘移到 C中,再 将 B 中的最上面个圆盘移到 A,再 B 中的 最下面 个圆盘移到 C,再移动 A 中的个圆盘移到 C
代码实现:
public static void hanoid(int n,char a,char b,char c ) {
if(n<=0) {
return;
}
// 将上面的 n-1(即除去最下面的全部) 个圆盘借助 C柱 移到 B柱
hanoid(n-1,a,c,b);
// 当A柱只剩一个时,此时将 A 底下的那块最大的圆盘移到 C
move(a,c);
// 再将 B 上的 n-1 个圆盘借助 A柱 移到 C柱 上
hanoid(n-1,b,a,c);
}
public static void move(char a, char b) {
// TODO Auto-generated method stub
System.out.println(a + "->" + b);
}
结果展示:
可以把n改成4或5,然后跟代码结果进行推导就会发现,核心就在于得将 A 柱上 n-1 个盘子,借助 C 柱的盘子移到 B 柱上,再将 A 上最大的移到 C 柱上,再借助 A 柱将 B柱的盘子移到 C上。
谢谢观看,路过点个赞…