数据结构学习之_汉诺塔递归算法

/*
	2013年3月25日 22:59:36 xulei
	汉诺塔: 设有n个盘子, 源柱子: A  中间柱子: B   目标柱子: C
		1. 先把A柱子上的前n-1个盘子从A借助C 移动到B; (移完后, A上只剩下最下面的那一个盘子了, 上面的n-1个已经移到了B上)
		2. 将A上的第n 个盘子直接移动到C 上. 盘子减少一个
		3. 再将B柱子上的n-1个盘子借助于A 移到C.
		4. 将B柱子上的第n上盘子直接移动到C上.
		重复1-4, 直到盘子为1个时结束.
*/

#include <stdio.h>

long step = 0;
int move(int n, char A, char C)  
{
	step ++;
	printf("step %ld:  将第%d个盘子从%c -> %c\n", step, n, A, C);
	return 0;
}  

int TowersOfHanoi(int n, char A, char B, char C)  
{ 	
	if (n > 0)  
	{  
		TowersOfHanoi(n-1, A, C, B);  // 刚开始, 盘子在A上, A借助C把上面n-1个盘子移动到B
		move(n,A,C);  
		TowersOfHanoi(n-1, B, A, C);  // B 借助A 移动到C
	} 
	return 0;
}

int main(int argc, char **argv)
{
	int n;
	printf("How many disks: ");
	scanf("%d", &n);
	TowersOfHanoi(n, 'A', 'B', 'C');

	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值