汉诺塔问题的算法分析及C++实现
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/09/29 22:17:56
汉诺塔问题的算法分析及C++实现
1.当仅有1个盘子时,把这个盘子从A塔柱移动到C塔柱上
2.当圆盘的个数多于1个时,如下解决:
(1) 先将A塔柱上的(n-1)个圆盘通过C塔柱移动到B塔柱上
(2) 再将A塔柱上的第n个圆盘直接移动到C塔柱上
(3) 最后B塔柱上的(n-1)个圆盘通过A塔柱移动到C塔柱上
该算法对应的代码如下:
void hanoi(int n,char a,char b,char c)
{
if(n==1){
cout
1.当仅有1个盘子时,把这个盘子从A塔柱移动到C塔柱上
2.当圆盘的个数多于1个时,如下解决:
(1) 先将A塔柱上的(n-1)个圆盘通过C塔柱移动到B塔柱上
(2) 再将A塔柱上的第n个圆盘直接移动到C塔柱上
(3) 最后B塔柱上的(n-1)个圆盘通过A塔柱移动到C塔柱上
该算法对应的代码如下:
void hanoi(int n,char a,char b,char c)
{
if(n==1){
cout
hanoi函数的目的是解决汉诺塔的移动序列,它有4个参数:
1.n表示要移动的盘子的个数
2.一开始盘子在哪个柱子上,这个变量叫a,所以可以说,一开始在a柱子上
4.最后盘子要移动到哪个柱子上,这个变量叫c,所以可以说,最后要移动到c柱子上
3.中间用来过渡的柱子.汉诺塔一共3个柱子,用两个是不能完成的,所以还要有一个柱子进行过渡.
首先,如果n等于1,说明就只有一个盘子要从a柱子移动到c柱子,那么直接打印a->c
如果盘子的数量大于1,那就要分开解决.
(1)首先把顶上的n-1个盘子从一开始的a柱子移动到b柱子
递归调用:
第一个参数是要移动的盘子数量,现在需要移动n-1个盘子
第二个参数是从哪里开始移动,现在盘子都在a柱子上,所以是a
第四个参数是移到哪里去,现在要移到b柱子上,所以是b
第三个参数是剩下的那个柱子,也就是c
(2)n-1个盘子移掉以后,a柱子只剩下最后的大盘子,直接移到c柱子,也就是打印a->c
(3)把(1)之后移到b柱子上的n-1个盘子从b移动到c
所以递归调用:
第一个参数是盘子个数,现在只有n-1个了
第二个参数是从哪里开始移,现在盘子都在b柱子上,所以是b
第四个参数是移到哪里去,我们要移到c柱子上,所以是c
第三个参数就是另外的一个柱子,所以是a
1.n表示要移动的盘子的个数
2.一开始盘子在哪个柱子上,这个变量叫a,所以可以说,一开始在a柱子上
4.最后盘子要移动到哪个柱子上,这个变量叫c,所以可以说,最后要移动到c柱子上
3.中间用来过渡的柱子.汉诺塔一共3个柱子,用两个是不能完成的,所以还要有一个柱子进行过渡.
首先,如果n等于1,说明就只有一个盘子要从a柱子移动到c柱子,那么直接打印a->c
如果盘子的数量大于1,那就要分开解决.
(1)首先把顶上的n-1个盘子从一开始的a柱子移动到b柱子
递归调用:
第一个参数是要移动的盘子数量,现在需要移动n-1个盘子
第二个参数是从哪里开始移动,现在盘子都在a柱子上,所以是a
第四个参数是移到哪里去,现在要移到b柱子上,所以是b
第三个参数是剩下的那个柱子,也就是c
(2)n-1个盘子移掉以后,a柱子只剩下最后的大盘子,直接移到c柱子,也就是打印a->c
(3)把(1)之后移到b柱子上的n-1个盘子从b移动到c
所以递归调用:
第一个参数是盘子个数,现在只有n-1个了
第二个参数是从哪里开始移,现在盘子都在b柱子上,所以是b
第四个参数是移到哪里去,我们要移到c柱子上,所以是c
第三个参数就是另外的一个柱子,所以是a
汉诺塔问题的算法分析及C++实现
牛顿算法和拉格朗日插值算法的C语言实现
结合中小学实际,分析在实现教育目的的过程中还存在哪些问题及提出对策.
背包问题的算法登上算法、递归算法、贪婪算法、动态规划算法利用matlab编程实现我把我仅有的分都给了
分析下面问题,用自然语言和流程图描述算法.找出A、B、C三个变量中值最大的一个.
Matlab实现遗传算法TSP问题
利用C语言怎样实现如下算法?
遗传算法和蚁群算法在求解TSP问题上的对比分析
数据结构(C) 请用类C语言实现括号匹配的检验这个算法
求matlab高手实现 问题补充的算法,用for语句 双层循环吧
matlab里面的函数wden如何用C语言实现啊?需要具体的算法~
请问如何用C语言实现下面的迭代和递归的两种算法