汉诺塔solution1

通过观察,可以发现Cube的移动有这样的pattern:
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<<

发布了8 篇原创文章 · 获赞 1 · 访问量 124

猜你喜欢

转载自blog.csdn.net/wouldlikemathpix/article/details/104397741