前言
题意
给定一个 1...2.. n 1...2..n 1...2..n,输出其所有入栈出栈的可能
思路
我们可以先将所有数放进栈中,然后再考虑出栈
因为是从 1... n 1...n 1...n的缘故,因此我们需要逆序存入栈中
然后开始考虑 d f s dfs dfs
每次 d f s dfs dfs我们考虑从定义的栈中拿出一个数,放进我们的等待栈中
如果等待栈有元素,也就是出战的队列我们考虑将其栈顶放进答案序列
然后下面就是 拿一个,放进等待栈,放进答案…
code
int n;
stack<int> endd,stk;
vector<int> ans;
void dfs(vector<int> ans,stack<int> stk,stack<int> endd){
if(ans.size() == n){
for(auto x : ans){
cout<<x<<" ";
}
cout<<endl;
return;
}
stack<int> stk_tmp = stk;
vector<int> ans_tmp = ans;
if (!stk.empty()) {
ans.push_back(stk.top());
stk.pop();
dfs(ans,stk,endd);
}
if (!endd.empty()) {
stk_tmp.push(endd.top());
endd.pop();
dfs(ans_tmp,stk_tmp,endd);
}
}
void solve(){
cin>>n;
for(int i = n ;i >=1; i -- )endd.push(i);
dfs(ans,stk,endd);
}
int main(){
IOS
CIT
COT
//int t;cin>>t;while(t--)
solve();
return 0 ;
}