汉诺塔,经典的LIFO递归问题,原理很简单,将N-1个移至Z,在将第N个移至 Y,最后将Z上移到Y上,但要求是只能移动顶,一次移动一个
#include<iostream>
#include<stack>
#include<list>
using namespace std;
void Hanoi(int n,stack<int,list<int> >& x,stack<int,list<int> >& y,stack<int,list<int> >& z){
if(n>0){
Hanoi(n-1,x,z,y);
y.push(x.top());
x.pop();
Hanoi(n-1,z,y,x);
}
}
int main(){
stack<int,list<int> > x;
stack<int,list<int> > y;
stack<int,list<int> > z;
for(int i=9;i>0;i--){//顶元素为1....底为9
x.push(i);
}
Hanoi(x.size(),x,y,z);
cout<<x.size()<<endl;
cout<<y.size()<<endl;
cout<<z.size()<<endl;
while(y.size()>0){
cout<<y.top()<<endl;
y.pop();
}
return 0;
}