题解 | #火车进站#
火车进站
https://www.nowcoder.com/practice/97ba57c35e9f4749826dc3befaeae109
#include <iostream> #include <stack> #include <vector> #include <map> using namespace std; int n; int a[10]; vector<int> state1; //出站火车状态表示 stack<int> state2; //在站中的火车 int state3 = 1; //还未进站的火车,当前枚举到第几辆车 map<string, int> mp; //存储最后结果,自动排序 void dfs() { if(state1.size() == n) { string res; for(auto t : state1) { res += t + '0'; res += ' '; } mp[res] = 1; return; } //在车站中栈顶火车只两种选择:一个是出栈一个是不出栈,不出栈也就是右边火车进栈 if(state2.size()) { state1.push_back(state2.top()); state2.pop(); dfs(); state2.push(state1.back());//恢复现场 state1.pop_back(); } if(state3 <= n) { state2.push(a[state3 ++] ); dfs(); state2.pop(); state3 --; } } int main() { cin >> n; for(int i = 1; i <= n; i ++) cin >> a[i]; dfs(); for(auto t : mp) cout << t.first << endl; return 0; } // 64 位输出请用 printf("%lld")