您的位置:首页 > 其它

出栈序列与卡特兰数

2016-08-19 20:34 155 查看
给定一个入栈序列,求出所有可能的出栈序列

#include <iostream>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
stack<int> stackOut, stackIn;
vector<vector<int>> res;
int n;
int total = 0;
vector<int> vec;
void out()
{
sort(res.begin(), res.end());
for (auto v : res)
{
for (int i = 0; i < n - 1; i++)
cout << v[i] << " ";
cout << v[n - 1] << endl;
}
}
void Solve(int step)
{
int temp;
if (stackOut.size() == 0 && stackIn.size() == 0)
{
res.push_back(vec);
total++;
return;
}
if (stackOut.size() > 0)
{
temp = stackOut.top();
stackOut.pop();
vec[step] = temp;
Solve(step + 1);
stackOut.push(temp);
}
if (stackIn.size() > 0)
{
temp = stackIn.top();
stackOut.push(temp);
stackIn.pop();
Solve(step);
stackIn.push(temp);
stackOut.pop();
}
}

int main()
{
while (cin >> n)
{
vector<int> v(n);
for (int i = n - 1; i >= 0; --i)
cin >> v[i];
for (int num : v)
stackIn.push(num);
vec.resize(n);
Solve(0);
out();
}
return 0;
}

total的结果是一个卡特兰数
关于卡特兰数有许多应用场景,网上也有许多资料。

leetcode上也有一道关于卡特兰数应用的题:

https://leetcode.com/problems/generate-parentheses/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  卡特兰数