数据结构11:汉诺塔问题

       汉诺塔是一个经典递归问题,但是我觉得确实有点绕,看了一会儿,总算有点眉目吧:假设有n层圆盘需要挪动,需要从X,Y,Z之间移动,那么目的就是将最后一层的圆盘挪动到Z轴上,但是要完成这一步,就需要将前n-1层所有的圆盘,按照从小到大的顺序暂时放置在Y轴上。将最后一个圆盘放置到Z上的时候,需要将Y上的n-1层圆盘全部转移到Z上,那么接下来思路就和最开始的一样了!

 

#include <stdio.h>
#include<stdlib.h>

typedef int Status;
Status move(int n,char x,char y,char z) //意思是将n个圆盘从x通过y移到z上去;
{
	if (n == 1)
		{
			printf("%c --> %c\n",x,z);
			return ;
		}
	move(n-1,x,z,y); //将n-1层全部放置到y上
	printf("%c --> %c\n",x,z);//这是最大的那个盘
	move(n-1,y,x,z);//再将Y轴上的所有盘转移到Z上。
}

int main()
{
	int n;
	printf("请输入汉诺塔层数:");
	scanf("%d",&n);
	move(n,'X','Y','Z');
	system("pause");
}
其实,我觉得,当最大的盘转移到目标轴之后呢,我们就可以忽略这个盘了,当它不存在就OK了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值