通过观察,可以发现Cube的移动有这样的pattern:
void Game::solve() {
while(stacks_[2].getsize()!=4){
legalMove(0,1);
legalMove(0,2);
legalMove(1,2);
}
}
void Game::legalMove(int a, int b) {
if(stacks_[a].getsize()==0 && stacks_[b].getsize()>0){Move(b,a);}
else if(stacks_[b].getsize()==0 && stacks_[a].getsize()>0){Move(a,b);}
else if(stacks_[b].getsize()>0 && stacks_[a].getsize()>0){
if(stacks_[a].peekTop().getlength()>stacks_[b].peekTop().getlength()){Move(b,a);}
else{Move(a,b);}
}
cout << *this<<endl;
}
void Game::Move(int a, int b) {// a->b
Cube tmpcube = stacks_[a].removeTop();
stacks_[b].push_back(tmpcube);
}
class Game{
private:
vector<Stack> stacks_;
public:
Game();
void solve();
void legalMove(int,int);
void Move(int,int);
//friend std::ostream & operator<<(std::ostream & os, const Game & gm);
};
现在的问题是:
无法cout<<