下载此文档

汉诺塔问题非递归算法详解汇总.doc


文档分类:IT计算机 | 页数:约2页 举报非法文档有奖
1/2
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/2 下载此文档
文档列表 文档介绍
汉诺塔问题非递归算法详解汇总
汉诺塔问题非递归算法详解汇总
1/2
汉诺塔问题非递归算法详解汇总

思路介绍:
第一,可证明,当盘子的个数为 n时,搬动的次数应等于 2^n-1汉诺塔问题非递归算法详解汇总
汉诺塔问题非递归算法详解汇总
1/2
汉诺塔问题非递归算法详解汇总

思路介绍:
第一,可证明,当盘子的个数为 n时,搬动的次数应等于 2^n-1。
尔后,把三根桩子按必然序次排成品字型(如:),再把全部的圆盘按至上而下是..C
从小到大的序次放在桩子 A上。
接着,依据圆盘的数目确立桩子的排放序次:
若n为偶数,;..C若n为奇数,。..B
最后,进行以下步骤即可:
(1)第一,按顺时针方向把圆盘1从现在的桩子搬动到下一根桩子,即当n为偶数时,若圆盘1在桩子A,则把它搬动到B;若圆盘1在桩子B,则把它搬动到C;若圆盘1在桩子C,则把它搬动到A。
(2)接着,把别的两根桩子上可以搬动的圆盘搬动到新的桩子上。
即把非空桩子上的圆盘搬动到空桩子上,当两根桩子都非空时,搬动较小的圆盘。
(3)重复(1)、(2)操作直至搬动次数为 2^n-1。
#include<iostream>
#include<cmath>
usingnamespacestd;
#defineCap64
classStake//表示每桩子上的状况
{
public:
Stake(intname,intn){this->name=name;top=0;s[top]=n+1;/*假设桩子最底部有第n+1个盘子,即s[0]=n+1,这样方便下边进行操作*/}intTop( )//获得栈顶元素{returns[top];//栈顶}intPop( )//出栈{returns[top--];
}voidPush(inttop)//进栈{}{next=p;}Stake*getNext( )//获得下一个对象的地址
{returnnext;s[++this->top]=top;voidsetNext(Stake*p)}intgetName( )//获得当前桩子的编号{returnname;
}
private:
ints[Cap+1];//表示每根桩子放盘子的最大容量
inttop,name;Stake*next;
};
voidmain( )
{
}
voidhanoi(constintn,intA,intB,intC)
{
Stakea(A,n),b(B,n),c(C,n);intn;voidhanoi(int,int,int,int);cout<<"请输入盘子的数目:";cin>>n;if(n<1)cout<<"输入的盘子数目错误!!!"<<endl;else{}cout<<"搬动"<<n<<"个盘子的步骤以下:"<<endl;if(

汉诺塔问题非递归算法详解汇总 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息