汉诺塔

汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?


思路:

对于三个的时候,假若都在A这个位置,要移到C位置。那么首先使得前两个金盘通过C位置移到B位置,然后第三个(也就是最大的那个)直接移动到C位置。接着B位置最上面的那个(也就是最小的那个)移动到A位置,再将B中的金盘(第二大的)移动到C位置,最后把A位置的移动到C位置。

当数量增加的时候,可以采用这样的方法,思路不变仅仅是过程多了。因此采用递归的方式可以解决。


import java.util.Scanner;

public class Hanoi {

	static Long step = 1L;
	public static void main(String[] args) {
		System.out.print("请输入金盘个数:");
		Scanner cin = new Scanner(System.in);
		int n = cin.nextInt();
		HanoiSol(n, 'A', 'B', 'C');
	}

	private static void HanoiSol(int n, char A, char B, char C) {
		if(n == 1) {
			move(n, A, C);
		}
		else {
			HanoiSol(n-1, A, C, B);//把n-1个从A通过C移到B
			move(n, A, C);
			HanoiSol(n-1, B, A, C);
		}
	}

	private static void move(int n, char A, char B) {
		System.out.println("第" + step++ + "步:把第" + n + "个金盘从" + A + "位置移到" + B + "位置");
	}
}

运行结果:


如果错误或不合理的地方,敬请指正哦~

加油!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值