java学习第27天,汉诺塔游戏算法

不知道汉诺塔这个游戏大家有没有玩过,非常有意思。算法思想也不复杂。

package java21to30;

public class D27_Hanoi {
	static int m = 0;// 移动次数

	public static void main(String[] args) {
		hanoi('a', 'b', 'c', 3);
	}

	// 递归实现汉诺塔的函数
	public static void hanoi(char A, char B, char C, int n) {
		if (n == 1)// 从A塔移到C塔
			D27_Hanoi.move(1, A, C);// 将编b号为1的圆盘从A移到C
		else {
			hanoi(A, C, B, n - 1);// 递归,把A塔上编号1~2的圆盘移到B上,以C为辅助塔
			D27_Hanoi.move(n, A, C);// 把A塔上编号为n的圆盘移到C上
			hanoi(B, A, C, n - 1);// 递归,把B塔上编号1~2的圆盘移到C上,以A为辅助塔
		}
	}

	public static void move(int disks, char N, char M) {
		System.out.println(String.format("第%s次移动,将%s号盘从%s->移动到->%s", (++m), disks, N, M));
	}
}

输出结果:

1次移动,将1号盘从a->移动到->c
第2次移动,将2号盘从a->移动到->b
第3次移动,将1号盘从c->移动到->b
第4次移动,将3号盘从a->移动到->c
第5次移动,将1号盘从b->移动到->a
第6次移动,将2号盘从b->移动到->c
第7次移动,将1号盘从a->移动到->c
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值