使用递归维护栈
C++ 代码
#include<iostream>
#include<vector>
#include<stack>
#include<algorithm>
using namespace std;
int n,ans = 20;
vector<int>state1;
stack<int>state2;
int state3 = 1;
void dfs()
{
if(!ans) return;
//维护的是已经出栈的数组元素
//当数组中的元素等于火车数时
if(state1.size() == n)
{
//输出二十行
ans --;
for(auto x : state1) cout << x;
cout << endl;
return;
}
//维护栈中的数组元素
if(state2.size())
{
state1.push_back(state2.top());
state2.pop();
dfs();
state2.push(state1.back());
state1.pop_back();
}
//维护还未入栈的元素
if(state3 <= n)
{
state2.push(state3);
state3 ++;
dfs();
state2.pop();
state3 --;
}
}
int main()
{
cin >> n;
dfs();
return 0;
}