zoukankan      html  css  js  c++  java
  • 卡塔兰数

    出栈次序问题:

    一个栈的进栈序列为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;
    }
  • 相关阅读:
    c#线程带参数
    svn自动update到指定目录
    204. 计数质数
    178. 分数排名
    387. 字符串中的第一个唯一字符
    374. 猜数字大小
    371. 两整数之和
    350. 两个数组的交集 II
    326. 3的幂
    219. 存在重复元素 II
  • 原文地址:https://www.cnblogs.com/1203ljh/p/4650881.html
Copyright © 2011-2022 走看看