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