汉诺塔非递归解法

来源:互联网 发布:淘宝代理一件商品 编辑:程序博客网 时间:2024/05/15 10:11
#include <iostream>#include <stack>using namespace std;class hanoiunit{public:    hanoiunit(int m,char i,char j,char k):n(m),fir(i),sec(j),thi(k){};    hanoiunit(const hanoiunit& b){n=b.n;fir=b.fir;sec=b.sec;thi=b.thi;}    int n;    char fir,sec,thi;};void hanoi(int,char,char,char);int main(int argc, const char * argv[]) {    int m;    cin>>m;    hanoi(m,'a','b','c');    return 0;}void hanoi(int num,char a,char b,char c){    stack<hanoiunit> s;    if(num==1)s.push(hanoiunit(1,a,b,c));    else{        s.push(hanoiunit(num-1, b, a, c));        s.push(hanoiunit(1, a, b, c));        s.push(hanoiunit(num-1, a, c, b));    }    while(! s.empty()){        hanoiunit h=s.top();        s.pop();        if(h.n==1)cout<<h.fir<<"->"<<h.thi<<endl;        else{            s.push(hanoiunit(h.n-1, h.sec, h.fir, h.thi));            s.push(hanoiunit(1, h.fir, h.sec, h.thi));            s.push(hanoiunit(h.n-1, h.fir, h.thi, h.sec));        }    }}

0 0