卡塔兰数
出栈次序问题:
一个栈的进栈序列为1,2,3……n,有多少种不同的出栈序列?
#include <stack> #include <vector> #include <iostream> using namespace std; #define N 100 int len, num[2], arr[N]; // num[2]分别记录剩余的入栈出栈操作次数 stack<int> s; // 根据v的记录用s模拟过程并输出 vector<int> v; // 记录到目前已进行的操作 void init() { cout << "input the length of sequence:" << endl; cin >> len; num[0] = len; num[1] = len; for(int i = 0; i < len; i++) arr[i] = i + 1; } void func() { if(v.size() == 2*len) // 输出找到的可行解 { int cnt = 0; vector<int>::iterator it; for(it=v.begin(); it!=v.end(); it++) { if(*it == 0) s.push(arr[cnt++]); else { cout << s.top() << " "; s.pop(); } } cout << endl; } if(num[0] > 0) // 满足入栈条件 { num[0]--; v.push_back(0); func(); // 递归 v.pop_back(); num[0]++; } if(num[0] < num[1]) // 满足出栈条件 { num[1]--; v.push_back(1); func(); // 递归 v.pop_back(); num[1]++; } } int main() { init(); func(); return 0; }