#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));
}
}
}
汉诺塔非递归解法
最新推荐文章于 2021-11-15 13:38:35 发布