题解 | #火车进站#

火车进站

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;
}

全部评论

相关推荐

04-15 13:42
四川大学 Java
蹲蹲offerrr:快投吧,有点晚现在
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务