铁轨(UVa 514) 经典数据结构算法,铁轨问题
铁轨(UVa 514)
经典算法,铁轨问题
关于数据结构中栈的应用,
题目:
PopPush城市有一座著名的火车站。这个国家到处都是丘陵。而这个火车站是建于上一个世纪。不幸的是,那时的资金有限。所以只能建立起一条路面铁轨。而且,这导致这个火车站在同一个时刻只能一个轨道投入使用,因为它缺少空间,当地的惯例是每一列火车从A方向驶向B方向时候,会用某种方式将车厢重组。假设火车将要到达A方向,拥有N个车厢(N<=1000),这些车厢按照递增顺序标记为1到N。负责从组车厢的领导,必须知道是否能从组车厢让它驶出B,而这个重组的序列就是a1\a2\a3…aN.帮组他并且写一个程序来判断是否可能按照所要求的车厢顺序。你可以假设,单个的车厢可以从列车上分离出来,在他们进入站台之前。并且他们可以自由移动,知道它们上了B轨道。你也可以假设在任意时候站台可以放下无数的车厢。但是只要一个车厢进入站台,它就不能返回A轨道,同时如果它离开了站台驶向B轨道,它就不能返回站台。
所以根据题目,我们总结出一下重要的信息:
进车站的顺序是:1,2,3,4…N (N <= 1000)
出车站的循序为:a1, a2, a3, a4…an(n = =N)
根据以上的信息我们写处了以下的代码:
#include<iostream>
#include<cstdio>
#include<stack>
using namespace std;const int MAX = 1000 + 10;int target[MAX], n; // target为目标车厢的顺序int main() {while (scanf("%d", &n) != EOF && n >= 0) { //输入火车数目for (int i = 1; i <= n; i++)cin >> target[i];stack <int> s;int ok = 1; //用来标记输入火车车厢的顺序是否能够正常出站int A = 1, B = 1;while (B <= n) {if (A == target[B]) { // 进站的火车和出站的火车为同一辆A++;B++;} else if (!s.empty() && target[B] == s.top()) { B++; // 如果不是同一辆和栈中的车厢进行比较s.pop();} else if (A <= n) {s.push(A++);// A号车厢如果没有被匹配到,A号车厢进栈s} else {ok = 0; // 进火车站的车厢已经没有,但是仍然不匹配目标序列,ok = 0, 自定义顺序不能正常出站break;}}cout << (ok ? "yes" : "no") << endl;}
}
铁轨(UVa 514) 经典数据结构算法,铁轨问题相关推荐
- 例题6-2 铁轨(Rails, ACM/ICPC CERC 1997, UVa 514)
栈应用 例题6-2 铁轨(Rails, ACM/ICPC CERC 1997, UVa 514) 错解 1.每次要把栈清空 2.不能用空的栈(栈顶)去比较 #include<iostream&g ...
- 【数据结构与算法】多种语言(VB、C、C#、JavaScript)系列数据结构算法经典案例教程合集目录
文章目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 2. 专栏地址 「 刘一哥与GIS的故事 」之<数据结构与算法> 3. 专栏目录 [经典回放]多种语言系列数据结构 ...
- 精选微软等公司数据结构+算法经典面试100题[1-80题]
原文转自:http://topic.csdn.net/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html 精选微软等数据结构+算法面试100 ...
- apriori算法c++实现_经典数据结构与算法(四):Python/C/C ++实现队列类型双端队列数据结构...
前期文章点击这里: 经典数据结构与算法(一):Python/C/C ++实现堆栈和队列 双端队列或双端队列是一种队列,其中可以从前面或后面执行元素的插入和删除.因此,它不遵循FIFO规则(先进先出). ...
- 20个经典数据结构与算法,300多幅算法手绘图解,带你领略算法之美
一些经典的数据结构和算法图书,偏重理论,读者学起来可能感觉比较枯燥.一些趣谈类的数据结构和算法图书,虽然容易读懂,但往往内容不够全面.另外,很多数据结构和算法图书缺少真实的开发场景,读者很难将理论和实 ...
- 数据结构十大经典排序算法--Python
十大经典排序算法 (java实现看这个)https://program.blog.csdn.net/article/details/83785159 名词解释: 1.冒泡排序 2.选择排序 3.插入排 ...
- Uva 514 Rails
原文地址 Uva 514 Rails 铁轨 PopPush城市有一座著名的火车站.这个国家到处都是丘陵.而这个火车站是建于上一个世纪.不幸的是,那时的资金有限.所以只能建立起一条路面铁轨.而且,这导致 ...
- 十种经典排序算法精粹(c语言版本)
下面给出这段时间我苦心研究验证过的十种经典排序算法的C语言版本,即下面的排序算法: 插入排序,shell排序,冒泡排序,快速排序,选择排序,堆排序,归并排序,桶排序,基数排序和计数排序.整理出来以作备 ...
- 十大经典排序算法动画与解析,看我就够了
作者 | 程序员小吴 转载自五分钟学算法(ID: CXYxiaowu) 排序算法是<数据结构与算法>中最基本的算法之一. 排序算法可以分为内部排序和外部排序.内部排序是数据记录在内存中进行 ...
最新文章
- .Net Core 环境安装
- bat 实现批量备份文件
- 近五年计算机网络技术的发展,计算机网络技术的近期发展
- MyBatis运行原理(三)接口式编程及创建代理对象原理分析
- 工作58:element三级列表的问题
- python基础--格式化输出
- Linux服务器编程 用SIGURG检测带外数据是否到达
- C语言 · 数组查找及替换
- java key value 数据类型_JAVA面试锦囊(一)
- 38. Element cloneNode() 方法
- 汇编程序16位带符号变量计算
- Android:Fragment官方文档
- 俄数学天才破解庞加莱猜想拒领百万奖金
- CRS-0215: Could not start resource 'ora.rac.rac2.inst'.
- 全面了解风控决策引擎
- 2022年河南省焊工高级技师理论知识模拟试题及答案
- 又一重量级国字头赛事!中国大学生计算机设计大赛全面启动
- 打印两个字符串的公共字符
- mysql函数LOCATE、POSITION和INSTR
- 做软件的和搞硬件的,谁更优越?程序员:感觉搞硬件的真厉害,年龄越大越吃香,软件是吃青春饭...