假设元素插入的顺序是<a,b,c,d>,插入和删除操作可任意进行(例如,插入一次删除一次、插入2次删除1次、插入3次删除2次……),最后全部元素被删除。请写出代码输出所有可能的出栈序列。
时间: 2023-03-25 20:01:25 浏览: 127
以下是可能的出栈序列:
a b c d
a b d c
a c b d
a c d b
a d c b
b a c d
b a d c
c a b d
c a d b
d c b a
代码如下:
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
void dfs(vector<int>& nums, stack<int>& st, vector<int>& path, vector<vector<int>>& res) {
if (nums.empty() && st.empty()) {
res.push_back(path);
return;
}
if (!st.empty()) {
int top = st.top();
st.pop();
path.push_back(top);
dfs(nums, st, path, res);
path.pop_back();
st.push(top);
}
if (!nums.empty()) {
int num = nums.front();
nums.erase(nums.begin());
st.push(num);
dfs(nums, st, path, res);
st.pop();
nums.insert(nums.begin(), num);
}
}
vector<vector<int>> getOutStackSequences(vector<int>& nums) {
vector<vector<int>> res;
stack<int> st;
vector<int> path;
dfs(nums, st, path, res);
return res;
}
int main() {
vector<int> nums = {1, 2, 3, 4};
vector<vector<int>> res = getOutStackSequences(nums);
for (auto& seq : res) {
for (int num : seq) {
cout << num << " ";
}
cout << endl;
}
return ;
}
阅读全文