汉诺塔问题

徘徊边缘 提交于 2019-12-09 14:33:38

题目:如下图所示,从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面,求移动的步骤和移动的次数

汉诺塔
思路解析:将 A 中的 n-1 个圆盘移到 C 中,再将 A 中的 n-1 个圆盘移到 B,再将 C 中的圆盘移到 B 上,再将 A 中的最下面的圆盘移到 C中,再 B 中的 n-1 个圆盘移到 A,再 B 中的 最下面 个圆盘移到 C,再移动 A 中的个圆盘移到 C(这里以n=3为例,建议画图)

代码实现

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 底下的那块最大的圆盘移到 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);
}

结果展示

汉诺塔代码演示

谢谢观看,路过点个赞…

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!