题解 | #火车进站#
火车进站
https://www.nowcoder.com/practice/97ba57c35e9f4749826dc3befaeae109
#include <any>
#include <iostream>
#include <vector>
using namespace std;
void dfs(int index, vector<int> &in_order, vector<int> &stack, vector<int> &path, vector<vector<int> > &allpath){
// cout<<"index"<<index;
// cout<<"stack";
// for(int i=0; i<stack.size();i++){
// cout<<stack[i];
// }
// cout<<"path";
// for(int i=0; i<path.size();i++){
// cout<<path[i];
// }
// cout<<endl;
if(stack.size()==0 && index>=in_order.size()){
allpath.push_back(path);
return;}
if(index<in_order.size()){
stack.push_back(in_order[index]);
dfs(index+1, in_order, stack, path, allpath);
stack.pop_back();
}
if(stack.size()>0){
// dfs(index, in_order, stack, path, allpath);
int top = stack.back();
path.push_back(top);
stack.pop_back();
dfs(index, in_order, stack, path, allpath);
path.pop_back();
stack.push_back(top);
}
}
int main() {
int n, temp;
cin>>n;
vector<int> stack, in_order, path;
vector<vector<int> > allpath;
for(int i=0;i<n;i++){
cin>>temp;
in_order.push_back(temp);
}
// cout<<"ok"<<endl;
int index=0;
dfs(index, in_order, stack, path, allpath);
for(int i=0; i<allpath.size();i++){
for(int j=i+1; j<allpath.size();j++){
for(int k=n-1; k>=0; k--){
if(allpath[i][k] > allpath[j][k]){
swap(allpath[i], allpath[j]);
}else if(allpath[i][k] == allpath[j][k]){
}}
}}
for(int i=0; i<allpath.size();i++){
for(int j=0; j<allpath[i].size();j++){
if(j<allpath[i].size()-1){
cout<<allpath[i][j]<<' ';
}else{
cout<<allpath[i][j];
}
}
cout<<endl;
}
return 0;
}
// 64 位输出请用 printf("%lld")


查看23道真题和解析