给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号,火车站只有一个方向进出,同时停靠在火车站的列车中,只有后进站的出站了,先进站的才能出站。

要求输出所有火车出站的方案,以字典序排序输出。

数据范围:1\le n\le 10\1≤n≤10

进阶:时间复杂度:O(n!)\O(n!) ,空间复杂度:O(n)\O(n)

输入描述:

第一行输入一个正整数N(0 < N <= 10),第二行包括N个正整数,范围为1到10。

输出描述:

输出以字典序从小到大排序的火车出站序列号,每个编号以空格隔开,每个输出序列换行,具体见sample。

示例1

输入:

3
1 2 3

复制输出:

1 2 3
1 3 2
2 1 3
2 3 1
3 2 1

复制说明:

第一种方案:1进、1出、2进、2出、3进、3出
第二种方案:1进、1出、2进、3进、3出、2出
第三种方案:1进、2进、2出、1出、3进、3出
第四种方案:1进、2进、2出、3进、3出、1出
第五种方案:1进、2进、3进、3出、2出、1出
请注意,[3,1,2]这个序这个序列是不可能实现的。
#include<bits/stdc++.h>using namespace std;
const int n=10;
int a[n],N;
bool b[n];
vector<vector<int>> res;
vector<int> path;void dfs(int x)
{if(x==N){for(int i=0;i<N;i++){path.push_back(a[i]);}res.push_back(path);path.clear();return ;}for(int i=1;i<=N;i++){if(!b[i]){a[x]=i;b[i]=true;dfs(x+1);b[i]=false;}}
}int main()
{cin>>N;int c[n];for(int i=0;i<N;i++)cin>>c[i];dfs(0);vector<vector<int>> prt;for(int j=0;j<res.size();j++){stack<int> than;vector<int> tmp=res[j];for(int i=0,z=0;i<N;i++){than.push(c[i]);while(!than.empty()&&than.top()==tmp[z])than.pop(),z++;}if(than.empty())prt.push_back(tmp);}for(auto i:prt){for(auto j:i)cout<<j<<' ';cout<<endl;}return 0;
}

火车进站(全排列+栈的弹出压进序列)相关推荐

  1. 复习栈和队列,详解最小栈,栈的弹出压入序列,逆波兰表达式求值

    栈和队列的概念 栈:吃进去吐出来 对列:吃进去拉出来 数据结构中的栈和内存中的区别 数据结构中的栈具有后进先出的特性,而内存中的栈是一个内存空间,只不过这个内存空间具与数据结构的栈具有相同的特性. 栈 ...

  2. java输出栈的弹出序列_剑指offer:栈的压入、弹出序列(Java)

    1.题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是 ...

  3. 《剑指offer》:[22]如何判断一个序列是否为栈的弹出序列

    题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序. 假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压栈序列,序列4,5,3,2,1是该压栈序列 ...

  4. 栈的弹出函数pop()实现方案探讨

    多日前,我在blog发表了对<多任务下的数据结构与算法>一书的评论,在与作者的探讨中,我们就栈的弹出函数设计有比较大的分歧,详见http://blog.csdn.net/lanphaday ...

  5. 栈的压入、弹出序列和栈所有可能的弹出顺序

    题目:输入两个整数序列,第一序列表示栈的压入顺序(假设没有相同的整数值),判断第二个序列是否为该栈弹出顺序.经典的一个笔试题目. #include <iostream> #include ...

  6. 剑指offer:面试题31. 栈的压入、弹出序列

    题目:栈的压入.弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 ...

  7. 剑指offer22:栈的压入、弹出序列

    题意: 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2, ...

  8. 举例让抽象问题具体化:栈的压入、弹出序列

    输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一 ...

  9. 【数据结构】栈的压入、弹出序列

    题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等,例如序列1,2,3,4,5是某栈的压栈序列,序列,4,5,3,2,1是该压栈序列 ...

最新文章

  1. html 图片剪裁控件,h5图像裁剪(基于canvas)插件Image-Clip
  2. Spark的RDD行动算子
  3. C#中的get和post请求(工具类)
  4. PHP probuf详细步骤_初识protobuf和php的相关用法
  5. zend studio常见问题解答
  6. 如何测试一个电梯,测试方案及测试用例
  7. Ubuntu Server安全Webserver搭建流程
  8. Linux操作Oracle(11)——Oracle用户密码过期 设置密码永不过期方法
  9. 有关二级菜单缓慢效果出现(transition)
  10. 正式开始学习GO语言
  11. windows网络编程 gethostbyname()
  12. Python 爬取zw年鉴
  13. 《Using OpenRefine》翻译~17
  14. 图解PKCS#1——第五部分 附录Mask generation functions MGF1
  15. Python全套视频
  16. 工商银行u盾 java_中国工商银行u盾怎么用
  17. Shelve Silently - 静默搁置 (Git 功能)
  18. 阿里云服务器开放端口的正确方式(超详细图文教程)
  19. 微信小程序开发之——文件上传
  20. matlab 图像卷积的方法与应用

热门文章

  1. 逆向破解之160个CrackMe —— 021
  2. (29)打鸡儿教你Vue.js
  3. 我的投资案例(1)-偶遇阿丁特,重仓好狗狗
  4. 做一个微信小程序商城需要多少钱?
  5. css - width / height
  6. 06_张孝祥_多线程_ThreadLocal类及应用技巧
  7. Arduino与震动马达模块握手
  8. 织梦后台样式php,织梦系统(DEDECMS)后台模板修改
  9. 12 整数转罗马数字
  10. win10键盘没坏打不出字怎么回事