网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

Hanoi塔问题怎么解决

这篇文章主要介绍“Hanoi塔问题怎么解决”,在日常操作中,相信很多人在Hanoi塔问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hanoi塔问题怎么解决”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

创新互联专注于河口网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供河口营销型网站建设,河口网站制作、河口网页设计、河口网站官网定制、微信小程序开发服务,打造河口网络公司原创品牌,更为您提供河口网站排名全网营销落地服务。

Hanoi塔问题——递归方法求解    

假设有三个分别命名为x、y、z的圆柱形塔座,在塔座x上插有n个半径大小各不相同,以小到大由上而下编号为1,2,····,n,如图所示。现在要求将X轴上的n个圆盘移至塔Z上并仍按原来的顺序叠放,圆盘移动时必须遵循以下规则:

1.每次只能移动一个圆盘

2.圆盘可以插在X、Y、Z任意一个塔座上

3.任何时刻都不能将一个较大的圆盘压在较小圆盘之上

如何实现圆盘的移动呢?这就要用到我们强大的递归思想。设一个变量n用来调用任意一个圆盘,当n=1时,只要将一号圆盘从X上移动到Z上即可;当n>1,需要利用Y做中间塔,若能设法将压在n号盘上的n-1个圆盘从X移至Y上,然后再将n号盘移到Z上,最后将Y上的n-1个圆盘移到Z上即可!而整个过程中对那n-1个圆盘进行的两次整体操作都可以分别作为一个完整的Hanoi问题。

由此求解的C函数如下:

void move(char a,int n,char c)

{

//此函数的操作为:将a塔上编号为n的圆盘移至c塔上

//此处省略若干字。。。

}

void Hanoi(int n,char a,char b,char c)

//将塔座a上的n个圆盘搬到c上,b作为中间塔

{

if(n==1)move(x,1,z);

else

{

Hanoi(n-1,x,z,y);

move(x,n,z);

Hanoi(n-1,y,x,z);

}

}

可以看出,整个程序都不需要用到实际用于存放Hanoi塔的存储空间(因为算法与客观存在的数据无关嘛),所以move函数可以写成:printf(“将%i号盘从%c塔移到%c塔”,n,a,c);

到此,关于“Hanoi塔问题怎么解决”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


新闻名称:Hanoi塔问题怎么解决
文章网址:http://bjjierui.cn/article/pgjeod.html

其他资讯