题解 | #火车进站#

火车进站

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

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

class solution {
  public:
    //回溯(全排列的思路)+栈(模拟出入栈)
    int n;
    vector<int> car;
    vector<int> order;
    vector<int> path;
    vector<bool> used;
    vector<vector<int>> res;

    bool check(vector<int>& path) {
        stack<int> st;
        int j = 0;
        for (int i = 0; i < n; i++) {
            st.push(order[i]);
            while (!st.empty() && path[j] == st.top() &&
                    j < n) { //放入直到栈顶等于path[j],然后弹出
                st.pop();
                j++;
            }
        }
        return st.empty();
    }

    void backtracking(vector<bool>& used) {
        if (path.size() == n) {
            if (check(path)) {
                res.push_back(path);
            }
            return;
        }
        for (int i = 0; i < car.size(); i++) {
            if (used[i]) continue;
            used[i] = true;
            path.push_back(car[i]);
            backtracking(used);
            path.pop_back();
            used[i] = false;
        }
    }
    solution(int n,vector<int>& c,vector<bool>& u,vector<int>& o):n(n),car(c),used(u),order(o){}
};
int main() {
    int n;
    while (cin >> n) { // 注意 while 处理多个 case
        vector<int> car;
        int tmp;
        for (int i = 0; i < n; i++) {
            cin >> tmp;
            car.push_back(tmp);
        }
        vector<int> order(car);
        sort(car.begin(), car.end());
        vector<bool> used(n, false);
        solution s(n,car,used,order);
        s.backtracking(used);
        
        for(auto & re : s.res){
            for(int j = 0; j<n; j++){
                cout << re[j] << " ";
            }
            cout<<endl;
        }
    }
    return 0;
}

全部评论

相关推荐

丿南烟丶:黑白模板吧,不要这样花哨的。 主要成就太空了,和获奖融在一起,写一两行就行了。 职业技能不要这样排,就传统的掌握精通什么什么然后举例补充的一些重要技术点。 自我介绍说实话也没啥用,可以删了。 把自己的两个项目方案细节补充上去,为什么这样设计,怎么设计,成果是什么按star法则来写 你要引导面试官来问你的技能和项目,你的获奖和自我介绍别人可能看都不看一眼或者不太在乎,重要的是展示你能干活的能力
点赞 评论 收藏
分享
迷茫的大四🐶:这才是秋招啊,我那除了广告还是广告的邮件通知,空白一片面试日程安排还配叫秋招吗
秋招白月光
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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