火车进站
2015-09-10 19:53
211 查看
描述 | 给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号。要求以字典序排序输出火车出站的序列号。 |
---|---|
知识点 | 栈 |
运行时间限制 | 0M |
内存限制 | 0 |
输入 | 有多组测试用例,每一组第一行输入一个正整数N(0<N<10),第二行包括N个正整数,范围为1到9。 |
输出 | 输出以字典序排序的火车出站序列号,每个编号以空格隔开,每个输出序列换行,具体见sample。 |
样例输入 | 3 1 2 3 |
样例输出 | 1 2 3 1 3 2 2 1 3 2 3 1 3 2 1 |
找出所有排列组合,在从中找出符合出栈顺序的,然后按字典序排列;注意:最后必须原样输出,每行最后不能有空格,空格加在中间,否则格式错误;
代码如下:
#include <iostream> #include <vector> #include <stack> using namespace std; bool isok(int a[10],int b[10],int n){ stack<int> s; int i = 0,j = 0; while(j < n){ if(s.empty()){ if(i < n){ s.push(a[i++]); }else return false; }else if(b[j] == s.top()){ j++; s.pop(); }else{ if(i < n){ s.push(a[i++]); }else return false; } } return true; } void allList(int begin,int a[10],int n,int b[300][10],int &k){ if(begin == n){ for(int i = 0;i < n;i++){ b[k][i] = a[i]; } k++; } for(int j = begin;j < n;j++){ int temp; temp = a[j]; a[j] = a[begin]; a[begin] = temp; allList(begin+1,a,n,b,k); temp = a[j]; a[j] = a[begin]; a[begin] = temp; } } int strp(int a[10],int b[10],int n){ for(int i = 0;i < n;i++){ if(a[i] == b[i]) continue; else if(a[i] < b[i]) return -1; else return 1; } return 0; } int main() { int n; cin >> n; int dom[10]; for(int i = 0;i < n;i++){ cin >> dom[i]; } int dom1[10]; for(int g = 0;g < n;g++){ dom1[g] = dom[g]; } int b[300][10],c[200][10]; int k = 0,r = 0; allList(0,dom1,n,b,k); for(int j = 0;j < k;j++){ if(isok(dom,b[j],n)){ for(int z = 0;z < n;z++){ c[r][z] = b[j][z]; } r++; } } int opm[10]; for(int wai = 0;wai < r-1;wai++){ for(int nei = wai+1;nei < r;nei++){ if(strp(c[wai],c[nei],n) > 0){ for(int i = 0;i < n; i++){ opm[i] = c[wai][i]; c[wai][i] = c[nei][i]; c[nei][i] = opm[i]; } } } } for(int or = 0;or < r;or++){ for(int op = 0;op < n;op++){ <span style="white-space:pre"> </span>if(op == 0) cout << c[or][op]; <span style="white-space:pre"> </span>else <span style="white-space:pre"> </span> cout << " " << c[or][op]; } cout << endl; } return 0; }
相关文章推荐
- STL源码——SGI 空间配置器
- OpenCV 支持向量机
- 杭电HDU OJ A + B Problem II ID1002 AC
- 《du命令》-linux命令五分钟系列之三
- 测试相关
- Fragment和Fragmentactivity解析
- 使用multipart请求处理文件上传
- Io 异常: The Network Adapter could not establish the connection 解决方法
- [Bootstrap]7天深入Bootstrap(4)CSS组件
- 网段划分
- C语言中宏定义函数与普通函数的区别
- webserver日志中\xCF\xE3\xB8\xDB\xCA\xAE\xB4\xF3\xCE\xC4\xBB\xAF\xB7\xFB\xBA\xC5这种形式原因及处理
- 《service》-“linux命令五分钟系列”之二
- js倒计时
- MySql C++调用库Connector/c++编译 和 接口封装【三】Connector/c++ 使用总结及封装
- MyEclipse8.5连接mysql数据库遇到的_SET问题
- hdu4463 Outlets(必含某条边的最小生成树)
- 把握好自己的事情和机会
- 安卓常见错误处理记录5:安卓系统编译报错 finished with non-zero exit value -1073741819
- 【游戏编程】分享一个FMOD 的编程实例