汉诺塔

这道题看了好久,中间的过程比较复杂,看网上一步步的分析才有点头绪,其实汉诺塔问题就是分为三步,第一步:将n-1(n>1)个盘子从a通过c移到b盘子上,第二步:把第n个盘子从a移到c上,第三步:将n-1个盘子从b通过a移到c上

#include <stdio.h>
void hanoi(int n,char a,char b,char c)
{
	if(n==1)
	printf("%c->%c\n",a,c);//当n只有1个盘子的时候直接从a柱子移动到目标柱子上 
	else
	{
	
	hanoi(n-1,a,c,b);/*第n-1个要从a通过c移动到b,先调用hanoi函数将n号盘
	子上面的n-1个盘子移到b柱子上*/ 
	printf("%c->%c\n",a,c);//将n号盘子直接移到目标柱子上 
	hanoi(n-1,b,a,c);/*n-1个移动过来之后b变开始盘,b通过a移动到c,
	这时候a盘已经没有盘子了,再将b柱子上的n-1个盘子移到目标柱子上*/ 
	}
 } 
 int main()
 {
 	int n;
 	scanf("%d",&n);
 	hanoi(n,'a','b','c');
 	return 0;
 	
}
//有相关的word可以看 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值