问题:解决了一个序列进栈出栈的顺序的问题。
思路:
state3是一个序列
state2是栈
state1是出栈后的序列
dfs:每一步都有俩种走法(1.进栈 2.出栈)
代码:
#include <iostream>
#include <algorithm>
#include <stack>
#include <vector>
using namespace std;
vector<int> state1;
stack<int> state2;
int state3=1;
int cnt=20;
int n;
void dfs()
{
if(!cnt) return ;
if(state1.size()==n)
{
for(auto t:state1) cout<<t;
cout<<endl;
cnt--;
return ;
}
if(state2.size())
{
int t=state2.top();
state1.push_back(t);
state2.pop();
dfs();
state2.push(t);
state1.pop_back();
}
if(state3<=n)
{
state2.push(state3);
state3++;
dfs();
state2.pop();
state3--;
}
}
int main()
{
cin>>n;
dfs();
return 0;
}