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;
    }
  • 相关阅读:
    CH6201走廊泼水节
    P3366 (模板)最小生成树
    linux 基础语法
    django 3.1 序列化讲述
    django 的基础设计
    django 的初始项目结构
    http
    mysql(一)
    反射型xss
    html(四)
  • 原文地址:https://www.cnblogs.com/1203ljh/p/4650881.html
Copyright © 2011-2022 走看看