按順序入棧求出棧的所有可能序列

 1 #include<iostream>
 2 #include<stack>
 3 #include<queue>
 4 #include<algorithm>
 5 using namespace std;
 6 
 7 int n;
 8 char a[5000];
 9 
10 void dfs(queue<char> b,int n,stack<int> st,queue<char> out)//example:abc
11 {
12     if(n<=0||(b.empty()&&st.empty()&&out.empty()))
13         return;
14 
15     
16     if (out.size() == n)//7.out3->0;
17     {
18         while (!out.empty())
19         {
20             cout << out.front() << " ";
21             out.pop();
22         }
23         cout << endl;
24         return;
25     }
26 
27     stack<int> stcopy = st;
28     queue<char> outcopy = out;
29 
30     if (!st.empty())//把st的值傳給out//2.stc1->0,out1->a 4.stc2->0 out2->ab 6.stc3->0 out3->abc 1.1.stc3->0 b->0
31     {
32         out.push(st.top());
33         st.pop();
34         dfs(b, n, st, out);
35     }//關鍵在於stcopy對於上一個st的保存在棧裏面。
36 
37 
38     if (!b.empty())//若是隊列沒空把隊首的值給1.stcopy//b->bc stc1->a 3.b->c stc2->b 5.b->0 stc3->c
39     {
40         stcopy.push(b.front());
41         b.pop();
42         dfs(b, n, stcopy, outcopy);
43     }
44 }
45 int main()
46 {
47     cin>>n;
48     queue<char> b,out;
49     stack<int>st;
50     for (int i = 0; i < n; i++)
51     { 
52         cin>> a[i];
53         b.push(a[i]);
54     }
55     dfs(b, n, st, out);
56     return 0;
57 
58 }
相關文章
相關標籤/搜索