题解 | #火车进站#
火车进站
https://www.nowcoder.com/practice/97ba57c35e9f4749826dc3befaeae109
#include <algorithm>
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
vector<int> path;
vector<vector<int>> res;
void dfs(vector<int>& nums,stack<int>& st,int index){
//完成index次入栈操作并且栈内元素全部出栈
if(index==nums.size() && st.size()==0){
res.push_back(path);
return;
}
//入栈后不出栈
if(index<nums.size()){
st.push(nums[index]);
dfs(nums,st,index+1);
st.pop();
}
//有数据就出栈
if(!st.empty()){
path.push_back(st.top());
st.pop();
dfs(nums,st,index);
st.push(path.back());
path.pop_back();
}
}
int main(){
int n;
std::cin >> n;
stack<int> st;
vector<int> nums(n);
for(int i=0;i<n;i++){
std::cin >> nums[i];
}
dfs(nums,st,0);
sort(res.begin(),res.end());
for(int i=0;i<res.size();i++){
for(int j=0;j<res[0].size();j++){
std::cout << res[i][j] << ' ';
}
std::cout << std::endl;
}
return 0;
}
查看11道真题和解析