您的位置:首页 > 其它

初试——Hanoi塔问题

2011-10-03 22:21 190 查看
初试——Hanoi塔问题,这次写完之后,感觉还不没有那么的理解递归和Hanoi塔的思想…在慢慢品味一下吧

这次还是用类去写了,不过觉得不用类的,有点多余,既然写好了就发上来吧…

还是和以前一样,话不多说了,上代码。

先是.h文件:

#include <iostream>
#include <stack>
using namespace std;

class Hanoi
{
private:

public:
explicit Hanoi();
void hanoi(int ,stack<int> &,stack<int> &,stack<int> &);	//hnoi塔的递归函数
void move(stack<int> &hx,const int &n,stack<int> &hz);	//移动塔中的圆盘
};


然后是.cpp文件:

#include "Hanoi.h"

Hanoi::Hanoi()
{
}

void Hanoi::move(stack<int> &hx,const int &n,stack<int> &hz)
{
hz.push(hx.top());	//将X的栈顶元素放入Z
hx.pop();
}

void Hanoi::hanoi(int n,stack<int> &hx,stack<int> &hy,stack<int> &hz)
{	//hnoi塔的递归函数,各塔均以引用传入函数

if(1==n)
{
move(hx,n,hz);
}
else
{
hanoi(n-1,hx,hz,hy);
move(hx,n,hz);
hanoi(n-1,hy,hx,hz);
}
}


最后是main()函数:

#include "Hanoi.h"

void main()
{
int t,n=3;	//n为圆盘个数,t是临时参数,记录n的值
stack<int> x,y,z;	//三座塔,x是塔源,y是辅助塔,z是目标塔
Hanoi h;

t=n;
while(n)
{	//各元素入栈
x.push(n--);
}

n=t;

h.hanoi(n,x,y,z);

while(!z.empty())
{
cout<<z.top()<<' ';
z.pop();
}

}


是不是应该把整个对Hanoi操作都放入类当中,包括数据输入和输出?

不太清楚,有没人请指教!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: