Tips:
三个子问题
将n-1 块从src经由 dest 移到 mid
一块由 scr移到 dest
n-1块经由 src 移到 dest
#include<iostream>
#include<stack>
using namespace std;
struct Problem{
int n;
char src,mid,dest;
Problem(int nn,char s, char m, char d):n(nn),src(s),mid(m),dest(d){}
};
stack<Problem> stk;
void Hanoi(int n, char src, char mid, char dest)
{
if(n==1){
cout<<src<<"->"<<dest<<endl;
return;
}
Hanoi(n-1,src,dest,mid);
cout<<src<<"->"<<dest<<endl;
Hanoi(n-1,mid,src,dest);
return;
}
int main()
{
int n;
cin>>n;
stk.push(Problem(n,'A','B','C'));
while(!stk.empty())
{
Problem curPrb=stk.top();
stk.pop();
if(curPrb.n==1)
cout<<curPrb.src<<"->"<<curPrb.dest<<endl;
else
{
stk.push(Problem(curPrb.n-1,curPrb.mid,curPrb.src,curPrb.dest));
stk.push(Problem(1,curPrb.src,curPrb.mid,curPrb.dest));
stk.push(Problem(curPrb.n-1,curPrb.src,curPrb.dest,curPrb.mid));
}
}
cout<<"----------------"<<endl;
Hanoi(n,'A','B','C');
return 0;
}