题目描述
假设有n个元素依次进栈,给出他们不同的出栈情况。输入n与元素。
输入
3
1 2 3
输出
1 2 3
1 3 2
3 2 1
2 1 3
2 3 1
样例输入
2
1 2
样例输出
1 2
2 1
计算出栈顺序的种数–百度搜索卡特兰数。
#include <iostream>
using namespace std;
#include <queue>
#include <stack>
void print(queue<int> s)
{
while(!s.empty())
{
cout<<s.front()<<" ";
s.pop();
}
cout<<endl;
}
void outn(queue<int> in,stack<int> st,queue<int> out)
{
if(in.empty())
{
if(st.empty())
print(out);
else
{
out.push(st.top());
st.pop();
outn(in,st,out);
}
}
else
{
if(st.empty())
{
st.push(in.front());
in.pop();
outn(in,st,out);
}
else
{
queue<int> inn(in);
stack<int> stt(st);
queue<int> outt(out);
outt.push(stt.top());
stt.pop();
outn(inn,stt,outt);
st.push(in.front());
in.pop();
outn(in,st,out);
}
}
}
int main()
{
int n;
cin>>n;
queue<int> in;
stack<int> st;
queue<int> out;
for(int i = 1;i <= n;i++)
in.push(i);
outn(in,st,out);
}
文中有不妥之处,还请各位大佬指出。