YTU 2243:输出可能的出栈顺序

题目描述

假设有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);
}

文中有不妥之处,还请各位大佬指出。

猜你喜欢

转载自blog.csdn.net/qm230825/article/details/86550257
今日推荐