Redian新闻
>
Re: 变态辣椒怎么不画漫画了
avatar
Re: 变态辣椒怎么不画漫画了# Joke - 肚皮舞运动
z*8
1
#include
using namespace std;
#include
#include
class Tower{
private:
int index;//indicate the number of tower
stack one_tower;
public:
Tower(int i=0):index(i){}//constructor
int getindex();
void add(int d);
void moveTopTo(Tower t);
void print();
void moveDisks(int n,Tower Destination,Tower buffer);
};
int Tower::getindex()
{
return index;
}
void Tower::add(int d)
{
if((!one_tower.empty())&&(d>one_tower.top()))
cout<else
one_tower.push(d);
}
void Tower::moveTopTo(Tower t)
{
cout<t.add(one_tower.top());
one_tower.pop();
//cout<}
void Tower::print()
{
cout<while(one_tower.top())
{
cout<one_tower.pop();
};
cout<}
void Tower::moveDisks(int n,Tower Destination,Tower buffer)
{
cout<Destination.getindex()<if(n>0)
{
moveDisks(n-1,buffer,Destination);
cout<moveTopTo(Destination);
buffer.moveDisks(n-1,Destination,*this);
}
}
//End definition of class Tower
void Towers_of_Hanoi()//this function used to move n disks from tower0 to
tower2
{
int n=3;
vector towers;
for(int i=0;i<3;i++)
{
Tower *pp = new Tower(i);
towers.push_back(*pp);
delete pp;
}
for(int j=n;j>0;j--)
towers[0].add(j);
towers[0].moveDisks(n,towers[2],towers[1]);
}
void main()
{
Towers_of_Hanoi();
}
几乎按着书上给的答案写的,唯一的区别是我把要移动的总数换成了3(方便debug),
自己设置了一些debug的句子,发现是在buffer调用moveDisks后,n=1的时候应该把
value1从tower2 move到tower1的时候,此时moveTopTo(Destination)没法执行,给出
的信息是“expresssion:deque iterator not dereferencable " 求解释。。。
avatar
m*l
2
【 以下文字转载自 Military 讨论区 】
发信人: crazyman (企予望之,步立踯躅), 信区: Military
标 题: Re: 变态辣椒怎么不画漫画了
发信站: BBS 未名空间站 (Wed Feb 8 23:34:07 2012, 美东)
avatar
b*i
3
传Tower的参数应该是都引用,否则传入的是一个copy在栈上。你pop总是one_tower自
己的成员pop,而给别的tower add,总是给一个copy来增加。最后tower都空了。

【在 z**********8 的大作中提到】
: #include
: using namespace std;
: #include
: #include
: class Tower{
: private:
: int index;//indicate the number of tower
: stack one_tower;
: public:
: Tower(int i=0):index(i){}//constructor

avatar
z*8
4
就是这个问题,谢谢了!

【在 b***i 的大作中提到】
: 传Tower的参数应该是都引用,否则传入的是一个copy在栈上。你pop总是one_tower自
: 己的成员pop,而给别的tower add,总是给一个copy来增加。最后tower都空了。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。