z**********8 发帖数: 229 | 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<<"error placing disks "<
else
one_tower.push(d);
}
void Tower::moveTopTo(Tower t)
{
cout<<"move "<
t.add(one_tower.top());
one_tower.pop();
//cout<<"move disk from tower "<
}
void Tower::print()
{
cout<<"Contens of Tower "<
while(one_tower.top())
{
cout<
one_tower.pop();
};
cout<
}
void Tower::moveDisks(int n,Tower Destination,Tower buffer)
{
cout<<"entering moveDisks, now n is: "<
Destination.getindex()<<" buffer is "<
if(n>0)
{
moveDisks(n-1,buffer,Destination);
cout<<"debug"<
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 " 求解释。。。 | b***i 发帖数: 3043 | 2 传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
| z**********8 发帖数: 229 | 3 就是这个问题,谢谢了!
【在 b***i 的大作中提到】 : 传Tower的参数应该是都引用,否则传入的是一个copy在栈上。你pop总是one_tower自 : 己的成员pop,而给别的tower add,总是给一个copy来增加。最后tower都空了。
|
|