博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AcWing 火车进栈
阅读量:4485 次
发布时间:2019-06-08

本文共 1220 字,大约阅读时间需要 4 分钟。

AcWing 火车进栈

Description

  • 这里有n列火车将要进站再出站,但是,每列火车只有1节,那就是车头。

    这n列火车按1到n的顺序从东方左转进站,这个车站是南北方向的,它虽然无限长,只可惜是一个死胡同,而且站台只有一条股道,火车只能倒着从西方出去,而且每列火车必须进站,先进后出。

    也就是说这个火车站其实就相当于一个栈,每次可以让右侧头火车进栈,或者让栈顶火车出站。

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

Input

  • 输入一个整数n,代表火车数量。

Output

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

Data Size

  • 1≤n≤20

Sample Input

3

Sample Output

123132213231321

题解:

  • 搜索(用栈模拟)。
  • 如果一上去题都不看就是无脑爆搜那就直接WA了(我就是这样)
  • 注意,这个搜索是基于“栈“的性质的!
  • 所以面对每一个状态,有下列两种选择:
    1. 把下一个数进栈
    2. 将栈顶弹出
  • 那么经过2 * n次操作后,所以元素肯定都已经出栈了。
#include 
#include
#include
#define N 25using namespace std;int n, flag, cnt;int a[N];stack
stk;void dfs(int step, int num){ if(flag) return; if(step > 2 * n) { cnt++; if(cnt == 20) flag = 1; for(int i = 1; i <= 2 * n; i++) if(a[i]) cout << a[i]; cout << endl; return; } if(stk.size()) { int t =stk.top(); a[step] = t; stk.pop(); dfs(step + 1, num); stk.push(t); a[step] = 0; } if(num <= n) { stk.push(num); dfs(step + 1, num + 1); stk.pop(); }}int main(){ cin >> n; dfs(1, 1); return 0;}

转载于:https://www.cnblogs.com/BigYellowDog/p/11300729.html

你可能感兴趣的文章
UVA GCD - Extreme (II)
查看>>
完成个人中心—导航标签
查看>>
前端性能优化
查看>>
static
查看>>
属性动画
查看>>
Hadoop集群时钟同步
查看>>
C++二维数组讲解、二维数组的声明和初始化
查看>>
纹理映射和混合
查看>>
PHP获取域名、IP地址的方法
查看>>
php验证复选框的小例子
查看>>
Sql Server 判断表或数据库是否存在
查看>>
计算机网络
查看>>
iOS-浅谈runtime运行时机制
查看>>
数字证书原理 - 转自 http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html
查看>>
关于float和margin
查看>>
Python练习-内置函数的应用
查看>>
洛谷P3905 道路重建
查看>>
数据表格 - DataGrid - 行编辑
查看>>
申请TexturePacker 或 PhysicsEditor free licenses
查看>>
kafka启动报错&问题解决
查看>>