经典汉诺塔问题

来源:互联网 发布:音视频格式 知乎 编辑:程序博客网 时间:2024/06/05 15:42
#include <iostream>#include <stack>#include <vector>#include <cassert>using namespace std;class Tower {public:stack<int> tower;int index;Tower(int index_in):index(index_in){}void addElement(int e){if(!tower.empty())assert(tower.top() >= e);tower.push(e);}void moveTopTo(Tower& t){int top = tower.top();tower.pop();t.addElement(top);cout << top << " from Tower " << index << " to Tower " << t.index << endl;}void moveDisks(int n, Tower& des, Tower& buffer){if(n > 0){moveDisks(n-1, buffer, des);moveTopTo(des);buffer.moveDisks(n-1, des, *this);}}};int main(int argc, const char* argv[]){Tower tower1(1);Tower tower2(2);Tower tower3(3);vector<Tower> towers;towers.push_back(tower1);towers.push_back(tower2);towers.push_back(tower3);int n = 4;for(int i = n; i > 0; i--){towers[0].addElement(i);}towers[0].moveDisks(n, towers[2], towers[1]);return 0;}

0 0