题解 | #火车进站#

火车进站

https://www.nowcoder.com/practice/97ba57c35e9f4749826dc3befaeae109

#include <algorithm>
#include <iostream>
#include <random>
#include <stack>
#include <vector>
using namespace std;

vector<vector<int>> results;

void backtrack(vector<int>& in_seq, vector<int>& out_seq, int n, stack<int>& stk){
    if(out_seq.size() == n){
        results.push_back(out_seq);
        return;
    }
    
    if (!in_seq.empty()) {
        int in_train = in_seq[0];
        in_seq.erase(in_seq.begin());
        stk.push(in_train);
        backtrack(in_seq, out_seq, n, stk);
        stk.pop();
        in_seq.insert(in_seq.begin(), in_train);
    }
    if(!stk.empty()){
        int top_train = stk.top();
        out_seq.push_back(top_train);
        stk.pop();
        backtrack(in_seq, out_seq, n, stk);
        stk.push(top_train);
        out_seq.pop_back();
    }
}

int main() {
    int n;
    cin>>n;
    vector<int> in_seq(n);

    for (auto&seq:in_seq) {
        cin>>seq;
    }

    vector<int> out_seq;
    stack<int> stk;

    backtrack(in_seq, out_seq, n,stk);
    sort(results.begin(), results.end());
           
    for (auto& result:results) {
        for (int i=0; i<result.size()-1; i++) {
            cout<<result[i]<<" ";
        }
        cout << result[result.size()-1]<<endl;

    }

   
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

谁知道呢_:要掉小珍珠了,库库学三年,这个结果
点赞 评论 收藏
分享
04-14 20:10
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务