題目:
如何求入棧順序為1234……N的序列的所有可能的出棧序列?
代碼:遞迴求解
#include <iostream><br />#include <vector><br />using namespace std;</p><p>void print(vector<int>& v)<br />{<br /> cout<<endl;<br /> for(int i=0;i<(int)v.size();i++)<br /> {<br /> cout<<v[i]<<"/t";<br /> }<br />}</p><p>void finn(const int n,int cur,vector<int>&stac,vector<int>&outL,int&count)<br />{<br /> if((int)outL.size ()==n)//終點<br /> {<br /> print(outL);<br /> count++;<br /> }<br /> if(cur!=n+1)//入棧<br /> {<br /> //操作<br /> stac.push_back(cur);<br /> //進入下層<br /> finn(n,cur+1,stac,outL,count);<br /> //恢複<br /> stac.pop_back ();<br /> }<br /> if(!stac.empty())//出棧<br /> {<br /> //留底<br /> int temp=stac[(int)stac.size ()-1];<br /> //操作<br /> outL.push_back (temp);<br /> stac.pop_back ();<br /> //進入下層<br /> finn(n,cur,stac,outL,count);<br /> //恢複<br /> outL.pop_back ();<br /> stac.push_back (temp);<br /> }<br />}<br />int f(const int n)<br />{<br /> vector<int> stac;<br /> vector<int> outL;<br /> int count=0;<br /> finn(n,1,stac,outL,count);<br /> return count;<br />}</p><p>int main()<br />{<br /> int n;<br /> cout<<"n=";<br /> cin>>n;<br /> cout<<"共"<<f(n)<<"個"<<endl;<br /> system("pause");<br /> return 0;<br />}<br />