题目地址:

https://www.acwing.com/problem/content/description/131/

这里有 n n n列火车将要进站再出站,但是,每列火车只有 1 1 1节,那就是车头。这 n n n列火车按 1 1 1到 n n n的顺序从东方左转进站,这个车站是南北方向的,它虽然无限长,只可惜是一个死胡同,而且站台只有一条股道,火车只能倒着从西方出去,而且每列火车必须进站,先进后出。也就是说这个火车站其实就相当于一个栈,每次可以让右侧头火车进栈,或者让栈顶火车出站。车站示意如图:

        出站<——    <——进站|车||站||__|

现在请你按字典序输出前 20 20 20种可能的出栈方案。

输入格式:
输入一个整数 n n n,代表火车数量。

输出格式:
按照字典序输出前 20 20 20种答案,每行一种,不要空格。

数据范围:
1 ≤ n ≤ 20 1≤n≤20 1≤n≤20

每列火车有三个状态,入站前,在站中,已出站。我们考虑按字典序搜索答案,每次搜的时候,尽量让编号小的列车在出站序列的前面。当站里有车的时候,优先将其出站,然后DFS进入下一层;如果站里没车,则只能将新车入站。当已出站序列长度为 n n n的时候即得到了一个答案。代码如下:

#include <iostream>
#include <stack>
#include <vector>
using namespace std;int n;
vector<int> post_stk;
stack<int> in_stk;
int pre_stk = 1;
int cnt;void dfs() {if (cnt == 20) return;if (post_stk.size() == n) {for (int x : post_stk) printf("%d", x);puts("");cnt++;return;}if (in_stk.size()) {post_stk.push_back(in_stk.top());in_stk.pop();dfs();in_stk.push(post_stk.back());post_stk.pop_back();}if (pre_stk <= n) {in_stk.push(pre_stk++);dfs();in_stk.pop();pre_stk--;}
}int main() {scanf("%d", &n);dfs();
}

时间复杂度 O ( 2 n ) O(2^n) O(2n),空间 O ( n ) O(n) O(n)。

【ACWing】129. 火车进栈相关推荐

  1. 129. 火车进栈【栈】

    #include<bits/stdc++.h> using namespace std; vector<int>ve; stack<int>st; int cnt= ...

  2. 数据结构总结1(火车进栈/兔子与兔子/括号画家/Editor/邻值查找/最大子序和/前缀统计/Phone List/The XOR Largest Pair)

    问题 A: 火车进栈 题目描述 这里有n列火车将要进站再出站-- 但是,每列火车只有1节-那就是车头-- 描述 有n列火车按1到n的顺序从东方左转进站,这个车站是南北方向的,它虽然无限长,只可惜是一个 ...

  3. 0x11.基本数据结构 — 栈与单调栈

    目录 一.栈 0.AcWing 41. 包含min函数的栈 (自己造栈) 1.AcWing 128. 编辑器 (对顶栈) 2.AcWing 129. 火车进栈 3.AcWing 130. 火车进出栈问 ...

  4. 基本数据结构篇(三万字总结)

    数据结构 栈 编辑器(对顶栈) 火车进栈 火车进栈问题(卡特兰数) 大数相乘 分解质因数 阶乘分解质因数 压位 配套的高精度除法 队列 小组队列 蚯蚓 双端队列 最大子序和(单调队列) 哈希 雪花雪花 ...

  5. 【算法专题】卡特兰数

    卡特兰数 1. 概述 卡特兰数:首先这个一个数,很多问题的结果都是卡特兰数,比如2016年全国三卷数学选择题压轴题让求解的就是卡特兰数,问题如下: 首先是结论:卡特兰数为: C 2 n n n + 1 ...

  6. 紫薯第10章数学 kaungbin专题14数论基础

    杂谈 kuangbin14数论Harmonic Number LightOJ - 1234 分段打表 + 欧拉爷爷o(1).(第一次触及了欧拉常熟) 10.1.1 && 10.1.2 ...

  7. c++实现简单的数据结构(1.链表合并 2.士兵队列训练问题 3.Rails 4.Josephus Problem 5.Tree Recovery 6.四则运算 7.愚人节的礼物 8.Web)

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮 ...

  8. 130. 火车进出栈问题

    Powered by:NEFU AB-IN Link 文章目录 130. 火车进出栈问题 题意 思路 代码 130. 火车进出栈问题 题意 一列火车 n 节车厢,依次编号为 1,2,3,-,n. 每节 ...

  9. 判断一个字符串是否为回文-链队(新建,进队,出队),链栈(新建,进栈,出栈)...

    回文:字符对称排列的字符串,例如ABCBA 思路:根据队:先进先出和栈: 先进后出的原则,进行比较出队和出栈的字符是否相等.如果相等,则为回文. 创建控制台应用程序. 1 #region 字符节点类 ...

最新文章

  1. Java如何优雅的实现时间控制
  2. html列表拖拽排序插件,可对列表自由拖拽排序的jQuery插件
  3. [css] 如何使用css3实现一个div设置多张背景图片?
  4. 现成的CA证书签发工具
  5. 【安装包】android-studio
  6. UE中使用正则表达式的一些技巧
  7. 拓端tecdat|R语言在BRFSS数据中可视化分析探索糖尿病的影响因素
  8. Nginx从入门到精通(全)
  9. 搜电影和网盘资源网站
  10. 此图片来自QQ空间,未经许可不可与引用
  11. 使用JS脚本抢腾讯云学生一元优惠券
  12. ai怎么渐变颜色_ai渐变工具怎么用?Adobe Illustrator渐变颜色实操教程
  13. Ubuntu10.10下安装Tor,PolipoVidalia
  14. word生成html冗余清理,如何清除WORD冗余格式代码(转)
  15. 首批5G手机概念热炒,但你真的敢用?
  16. K2P padavan固件下宽带与IPTV融合
  17. 我希望用Java拥有的十大锡兰语言功能
  18. Acwing-280-陪审团(背包dp?)
  19. 中智集团携手亚信安全 打造立体化、智能化网络防御体系
  20. mysql存储animoji_iPhoneXS在微信里发送Animoji表情操作教程

热门文章

  1. unix 服务器 密码修改,主流服务器UNIX操作系统用户帐号的设置.docx
  2. (微信开发)PHP curl模拟登陆教务系统查询成绩查询课表实现微信查成绩差课表功能
  3. 怎样把mpg格式转成mp4
  4. arcgis10.7 面要素均匀生成点
  5. torchvision
  6. iOS视频裁剪小工具——VideoTailor
  7. 苹果怎么关闭自动亮度_微信自动关闭怎么解决
  8. SaaS系统:做难有意思的事
  9. 特效php扫一扫,CSS_CSS实现微信扫码特效 , 微信扫码效果如下所示: - phpStudy
  10. 互联网检测服务 ------Windows Server