汉若塔的非递归算法???

meng_tenboy 2001-07-13 04:06:32
...全文
62 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
meng_tenboy 2001-07-14
海星,考完了吗?
现在我可以好好的向你请教一番。
回复
anjun 2001-07-13

不好意思
搞错了
回复
starfish 2001-07-13
anjun,人家要的是非递归的,不时递归的!

下面才是非递归的代码:

/* Non-recursive solution to Towers of Hanoi */

void main();

#include <stdio.h>

#define width (rings+1)

void main()
{
int rings, last, next, x, z[500], s[3];

printf("how many rings? "); scanf("%d",&rings);

for(x=1; x<=rings; x++) /* put rings on first peg */
z[x]=width-x;
for(x=0; x<=2*width; x+=width) /* set base for each peg */
z[x]=1000;

/* if even number of rings, put first ring on second peg; if odd, on third */

if(rings%2==0)
{
last=1; s[2]=0; s[1]=1;
z[width+1]=z[rings];
}
else
{
last=2; s[1]=0; s[2]=1;
z[2*width+1]=z[rings];
}

printf("from 1 to %d\n",last+1); s[0]=rings-1;

while(s[0]+s[1]) /* while first and second pegs aren't empty */
{
/* next ring to move is smaller of rings on the two pegs not moved onto last */

if(last==0) next=z[width+s[1]]<z[2*width+s[2]]?1:2;
if(last==1) next=z[s[0]]<z[2*width+s[2]]?0:2;
if(last==2) next=z[s[0]]<z[width+s[1]]?0:1;

/* top ring of 'to' peg must be larger and an even 'distance' away */

if((z[next*width+s[next]]>z[last*width+s[last]])||
((z[last*width+s[last]]-z[next*width+s[next]])%2==0)) last=3-next-last;

printf("from %d to %d\n",next+1,last+1);

s[next]=s[next]-1; s[last]=s[last]+1; /* move from 'next' to 'last' peg */
z[last*width+s[last]]=z[next*width+s[next]+1];
}
}
回复
anjun 2001-07-13
class Hanoi
{
friend void TowersOfHanoi(int);
public:
void TowersOfHanoi(int n,int x,int y,int z);
private:
Stack<int>*S[4];
};

void Hanoi::TowerOfHanoi(int n,int x,int y,int z)
{
int d;
if(n>0)
{
TowersOfHanoi(n-1,x,z,y);
S[x]->Delete(d);
S[y]->Add(d);
ShoeState();
TowerOfHanoi(n-1,z,y,x);
}
}

void TowerOfHanoi(int n)
{
Hanoi X;
X.S[1]=new Stack<int>(n);
X.S[2]=new Stack<int>(n);
X.S[3]=new Stack<int>(n);
for(int d=n;d>0;d--)
X.S[1]->Add(d);
X.TowerOfHanoi(n,1,2,3)
}
回复
相关推荐
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2001-07-13 04:06
社区公告
暂无公告