题解 | 火车进站

火车进站

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

回溯法

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

vector<vector<int>> out_order;
vector<int> path;

void backTrack(int index, vector<int>& order, stack<int>& st) {
    if(path.size() == order.size() && st.empty()) {
        out_order.push_back(path);
        return ;
    }

    //将当前火车入站
    if(index < order.size()) {
        st.push(order[index]);
        backTrack(index + 1, order, st);
        st.pop();
    }

    //将栈顶火车出站
    if(!st.empty()) {
        int train = st.top();
        st.pop();
        path.push_back(train);
        backTrack(index, order, st);
        st.push(train);
        path.pop_back();
    }
}

int main() {
    int n;
    cin >> n;
    stack<int> st;
    vector<int> order(n);
    for (int i = 0; i < n; ++i) {
        cin >> order[i];
    }
    out_order.clear();
    path.clear();
    backTrack(0, order, st);
    sort(out_order.begin(), out_order.end());
    for (auto& o : out_order) {
        for (int& i : o) {
            cout << i << " ";
        }
        cout << endl;
    }
    return 0;
}

全部评论
点赞 回复 分享
发布于 03-09 09:15 上海

相关推荐

有没有友友知道这样是开启下一个志愿还是在池子里等人捞
早饭有梨:为什么有的是回到人才池,有的是变成筛选中,我二面挂直接变回筛选中了
点赞 评论 收藏
分享
03-20 18:39
已编辑
电子科技大学 C++
点赞 评论 收藏
分享
Beeee0927:正确的建议
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务