zoukankan      html  css  js  c++  java
  • 入栈出栈的顺序问题

    题意
    某个字母序列,把这字母序列按顺序压入栈中,在任意过程,允许字符出栈,求所有的可能性
    思路
    模拟出栈入栈的过程,暴力枚举每一种情况。


    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <stack>
    #include <vector>
    using namespace std;
    int n;
    char str[1000];
    
    void dfs(stack<char> S, vector<char> ans, int cur)
    {
        if(cur == n && S.empty()) //边界输出结果
        {
            for(int i = 0; i < ans.size(); i++)
                printf("%c", ans[i]);
            puts("");
            return;
        }
        else if(cur == n && !S.empty()) //全部出栈到结果中
        {
            char ch = S.top();
            ans.push_back(ch);
            S.pop();
            dfs(S, ans, cur);
            S.push(ch);
            ans.pop_back();
            return;
        }
        if(!S.empty()) // 枚举出栈的个数
        {
            stack<char> nS = S;
            vector<char> nans = ans;
            while(!nS.empty())
            {
                nans.push_back(nS.top());
                nS.pop();
                nS.push(str[cur]);
                dfs(nS, nans, cur+1);
                nS.pop();
            }
        }
        //选择此次不出栈
        S.push(str[cur]);
        dfs(S, ans, cur+1);
        S.pop();
    }
    
    int main()
    {
        cin >> str;
        n = strlen(str);
        stack<char> S;
        vector<char> ans;
        dfs(S, ans, 0);
        return 0;
    }
    
  • 相关阅读:

    队列
    数据结构简介
    标准模板库
    类模板
    函数模板
    srvctl error
    FLASH BACK
    RAC 设置archive log模式
    CHAPTER 1 Architectural Overview of Oracle Database 11g
  • 原文地址:https://www.cnblogs.com/Alruddy/p/7667072.html
Copyright © 2011-2022 走看看