当前位置: 首页 > news >正文

佛山企业网站建设咨询山东服务好的seo

佛山企业网站建设咨询,山东服务好的seo,做企业网站选百度云还是阿里云,阜南网站建设公司介绍 汉诺塔是源于印度的一个古老传说的小游戏,简单来说就是有三根柱子,开始的时候,第一根柱子上圆盘由大到小,自下往上排列。这个小游戏要实现的目的呢,就是要把第一根柱子上的圆盘移到第三根的柱子上去;…

介绍

汉诺塔是源于印度的一个古老传说的小游戏,简单来说就是有三根柱子,开始的时候,第一根柱子上圆盘由大到小,自下往上排列。这个小游戏要实现的目的呢,就是要把第一根柱子上的圆盘移到第三根的柱子上去;条件呢,就是在移动过程当中不能将大的圆盘放在小的圆盘上面,我们可以利用中间第二根柱子作为桥梁来承接我们要移动的圆盘。

而在这个传说当中,一共有64块圆盘,假设我们使用递归的方法,我们也得用18446744073709551615的步数来实现我们的目的,换算成时间呢,我们得花5845.42亿年来实现这个过程。

算法思路

实现这个小游戏的算法思路是什么呢?

我们一定要将最大的那块圆盘放到C柱那里去,那么我们的目的就很明确,我们倒着思考一下,最后那几步的时候,我们是要将上面的n-1块圆盘移动到中间的柱子上,最后再将n-1块圆盘放到C柱上的。

假设我们这里有三块圆盘,我们先将A盘上的两块小圆盘移到B盘上去

再将A柱上最大的圆盘移动到C柱上

再将B柱上的圆盘放回C住上,最后大功告成

那在这一步的前一步呢,那不就是n-2块了吗,对于前面的步骤,都是和最后的类似,那最后一步我们走了几步呢?假设我们有一个表达式能描述移动的步数,那么f(n)=2*f(n-1)+1,f(1)=1,f(0)=0

为什么会有这个表达式呢,我们先移动了n-1块盘到B柱,再将n-1块盘到C柱,这里我们就可以得到2*f(n-1),我们还将最下面的那个盘子放到了C盘这里,所以我们在这里得加一。

最后我们可以得到步数的结果为f(n)=2^n-1

其它方法

美国学者曾提出过一种更为简洁的方法:首先把三根柱子按顺序排成品字型,把所有的圆盘按从大到小的顺序放在柱子A上,根据圆盘的数量确定柱子的排放顺序:

  • 若n为偶数,按顺时针方向依次摆放 A B C
  • 若n为奇数,按顺时针方向依次摆放 A C B

步骤

  1. 按顺时针方向把圆盘1从现在的柱子移动到下一根柱子,即当n为偶数时,若圆盘1在柱子A,则把它移动到B;若圆盘1在柱子B,则把它移动到C;若圆盘1在柱子C,则把它移动到A。 

  2. 接着,把另外两根柱子上可以移动的圆盘移动到新的柱子上。即把非空柱子上的圆盘移动到空柱子上,当两根柱子都非空时,移动较小的圆盘。这一步没有明确规定移动哪个圆盘,你可能以为会有多种可能性,其实不然,可实施的行动是唯一的。

  3. 反复进行⑴⑵操作,最后就能按规定完成汉诺塔的移动。

 代码实现

python

def f(n):if n==0:return 0else:return 2*f(n-1)+1
x=int(input("请输入片的个数:"))
print("需要移动",f(x),"次")
def hanoi(n, a, b, c):if n == 1:print(a, '-->', c)else:hanoi(n - 1, a, c, b)print(a, '-->', c)hanoi(n - 1, b, a, c)
# 调用
hanoi(5, 'A', 'B', 'C')

cpp

#include <iostream> using namespace std; void hanoi(int n, char source, char help, char target){static int step = 0; if (n == 1)std::cout << (++step) << ": " << source << "---->" << target << endl; else{// move n-1 disks from source to help hanoi(n-1, source, target, help); std::cout <<(++step) << ": " << source << "---->" << target << endl; hanoi(n-1, help, source, target);}
}
int main(void){hanoi(10, 'a', 'b', 'c');return 0; 
}

C

#include <stdio.h>
#include <windows.h>
void Hanoi(int n, char a,char b,char c);
void Move(int n, char a, char b);
int count;
int main()
{int n=8;printf("汉诺塔的层数:\n");scanf(" %d",&n);Hanoi(n, 'A', 'B', 'C');Sleep(20000);return 0;
}
void Hanoi(int n, char a, char b, char c)
{if (n == 1){Move(n, a, c);}else{Hanoi(n - 1, a, c, b);Move(n, a, c);Hanoi(n - 1, b, a, c);}
}
void Move(int n, char a, char b)
{count++;printf("第%d次移动 Move %d: Move from %c to %c !\n",count,n,a,b);
}

http://www.mmbaike.com/news/57658.html

相关文章:

  • 深圳java网站开发上往建站
  • 广州天与地网站建设广州seo招聘网
  • 建设网站的华丽语言付费推广平台有哪些
  • 海口企业网站建设制作哪家专业宣传营销方式有哪些
  • 网站seo诊断优化分析该怎么做网络营销好学吗
  • wordpress全站音频淘宝网店代运营正规公司
  • 想更新公司网站怎么做登录百度账号注册
  • 科协建设网站 方案百度搜索排名优化
  • b2c网站的后台管理功能包括重庆网站到首页排名
  • 做的网站每年需要续费百度怎么免费推广自己的产品
  • 沈阳品牌网站建设全网络品牌推广
  • 固定ip 建网站关键词云图
  • 长沙手机网站首页设计公司百度云资源搜索引擎
  • 做外贸用什么搜索网站seo快排软件
  • 知名网站建设企业四川seo选哪家
  • wordpress 微博评论插件最好用的手机优化软件
  • 广州住建官方网站怎么看百度关键词的搜索量
  • 如何在网站中做公示信息如何做网络推广运营
  • cms是什么意思体积专业网站优化排名
  • 想做个ktv的网站怎么做百度seo新站优化
  • 无锡网站制作平台长沙网站优化对策
  • wordpress企业站主题哪个好东莞营销外包公司
  • wordpress安全证书电脑优化软件
  • 泰安网站建设步骤企业网站优化服务公司
  • wordpress初级教程老左中山seo排名
  • 毕设网站可以用axure做吗哪些网站可以免费申请域名
  • 网站免费建站厂商定制现在疫情怎么样了最新消息
  • 白银网站建设什么是网站优化
  • 邯郸做网站最好的公司网站推广建设
  • 普通政府网站 多少钱怎么被百度收录