AcWing 129. 火车进栈
原题链接
简单
作者:
帅
,
2020-09-03 21:03:26
,
所有人可见
,
阅读 421
C++ 代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6+6;
vector<int> sta1; //状态1, 表示已经从停车场出来的数字
stack<int> sta2; //状态2, 表示还在停车场的数字
int sta3 = 1; //状态3, 表示还未进停车场的数字
int n, cnt = 20;
void dfs()
{
if(!cnt) return; //如果已经输出了20个数字了,那么我们直接跳出
if(sta1.size() == n) //如果从停车场出来的数字已经是总的数字,那么我们输出就好了
{
cnt --; //输出一次要减一次
for(int i = 0; i < sta1.size(); i ++)
{
cout << sta1[i];
}
cout << endl;
return;
}
if(!sta2.empty()) //如果停车场里面有车,则我们先输出停车场里的车
{
sta1.push_back(sta2.top()); //将停车场最外的车pop出来给状态1
sta2.pop();
dfs(); //做完操作后要dfs下一个操作
sta2.push(sta1.back()); //记得dfs完了要还原
sta1.pop_back();
}
if(sta3 <= n)
{
sta2.push(sta3); //如果还有车没有停进停车场,则停进去
sta3 ++; //没有进去的车排位数加一
dfs(); //dfs
sta2.pop(); //还原
sta3 --;
}
}
int main()
{
scanf("%d",&n);
dfs();
return 0;
}