程序员面试金典 8.6

Towers of Hanoi:求解汉诺塔问题。

class Solution {
public:
    void hanota(vector<int>& A, vector<int>& B, vector<int>& C) {
        return moveDisk(A.size(), A, C, B);
    }
private:
    void moveDisk(size_t n, vector<int> &Origin, vector<int> &Destination, vector<int> &Buffer)
    {
        if(n == 1) return doMoveDisk(Origin, Destination);
        moveDisk(n - 1, Origin, Buffer, Destination);
        doMoveDisk(Origin, Destination);
        moveDisk(n - 1, Buffer, Destination, Origin);
    }
    void doMoveDisk(vector<int> &Origin, vector<int> &Destination)
    {
        int top = Origin.back();
        Origin.pop_back();
        Destination.push_back(top);
    }
};
发布了194 篇原创文章 · 获赞 2 · 访问量 7716

猜你喜欢

转载自blog.csdn.net/RayoNicks/article/details/105459545
8.6
今日推荐