栈例题-火车车厢重组

一组火车车厢编号1-n

从右向左经过车站

每节车厢可以临时进站(栈),放过主线上的几节车厢后再重新上路跟上。

输入车厢数和希望得到的车厢顺序,判断是否可能。

CCF教材下册P149,例6.9

代码如下:

 1 #include <iostream>
 2 #include <string>
 3 #include <cmath>
 4 #include <algorithm>
 5 using namespace std;
 6 struct Stack
 7 {
 8     int a[100];
 9     int p;
10 };
11 bool isempty(Stack *s)
12 {
13     return s->p==-1;
14 }
15 void push(Stack *s,int x)
16 {
17     s->p++;
18     s->a[s->p]=x;
19 }
20 int pop(Stack *s)
21 {
22     if(!isempty(s))
23     {
24         return s->a[s->p--];
25     }
26     else
27     {
28         //cout<<"The stack is empty";
29         return -1;
30     }
31 }
32 int gettop(Stack *s)
33 {
34     if(!isempty(s))
35     {
36         return s->a[s->p];
37     }
38     else
39     {
40         //cout<<"The stack is empty";
41         return -1;
42     }
43 }
44 main()
45 {
46     Stack *mystack=new Stack;
47     int a[100]={0},b[100]={0},n,*p1,*p2;//a为目的序列,b为初始序列,b火车从右向左经过车站
48     bool flag=true;
49     mystack->p=-1;
50     p1=a;
51     p2=b;
52     //初始化开始
53     cin>>n;
54     for(int i=0; i<n; i++)
55     {
56         b[i]=i+1;
57     }
58     for(int i=0; i<n; i++)
59     {
60         cin>>a[i];
61     }
62     //初始化结束
63     while(*p1!=0)
64     {
65         if(*p2==0&&gettop(mystack)!=*p1)
66         {
67             flag=false;
68             break;
69         }
70         else
71         {
72             if(*p1==*p2)
73             {
74                 p1++;
75                 p2++;
76             }
77             else if(*p1==gettop(mystack))
78             {
79                 pop(mystack);
80                 p1++;
81             }
82             else
83             {
84                 push(mystack,*p2);
85                 p2++;
86             }
87         }
88     }
89     if(flag)
90     {
91         cout<<"I can do it.";
92     }
93     else
94     {
95         cout<<"That is impossible.";
96     }
97     free(mystack);
98 }

end here

原文地址:https://www.cnblogs.com/wanjinliu/p/11420051.html

时间: 2024-10-12 10:07:42

栈例题-火车车厢重组的相关文章

火车车厢重排问题

问题描述:一列货运火车从出发站出发时火车上一共有n节车厢,编号分别是1到n.运货的各节车厢是在入轨上时是随机的顺序,火车头在出轨处,现在要将各节车厢按编号从大到小挂到车头上,其中在入轨与出轨之间有k条缓冲铁轨,将通过缓冲铁轨完成本次的火车车厢的重排. 具体规则: 一.车厢从入轨的前部(即右端)只可以移动到一个缓冲铁轨的顶端或出轨的右端. 二.缓冲铁轨的顶端的车厢只可以移动到出轨的最左端 三.车厢不能从一个缓冲铁轨移动到另一个缓冲铁轨或者再移动到入轨 四.车厢移动到出轨的最左端(即火车头端)后不能

火车车厢重排问题--队列模拟

①问题描述 一列货运列车共有n节车厢,每节车厢将停放在不同的车站.假定n个车站的编号分别为1-n,即货运列车按照第n站至第1站的次序经过这些车站.为了便于从列车上卸掉相应的车厢,车厢的编号应与车站的编号相同,这样,在每个车站只要卸掉最后一节车厢.所以,给定任意次序的车厢,必须重新排列它们. 车厢的重排工作可以通过转轨站完成.在转轨站中有一个入轨.一个出轨和k个缓冲轨,缓冲轨位于入轨和出轨之间.假定缓冲轨按先进先出的方式运作,设计算法解决火车车厢重排问题. ②基本要求 设计存储结构表示n个车厢.k

火车车厢重排调度

1 /*************************************************************** 2 *程序名称:火车车厢重排调度 3 *作 者:tbz 4 *完成日期:2014年10月18日 5 ***************************************************************/ 6 #include <queue> 7 #include <iostream> 8 #include "Tra

1683 车厢重组

个人博客:doubleq.win 1683 车厢重组 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 白银 Silver 题解 题目描述 Description 在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转.一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序.于是他就负责用这座桥将进站的车厢按车厢号从小到大排列.他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序,

栈:火车进站

题目描述 这里有n列火车将要进站再出站-- 但是,每列火车只有1节---那就是车头-- 描述 有n列火车按1到n的顺序从东方左转进站,这个车站是南北方向的,它虽然无限长,只可惜是一个死胡同,而且站台只有一条股道,火车只能倒着从西方出去,而且每列火车必须进站,先进后出. (某生:不就是个栈吗?每次可以让右侧头火车进栈,或者让栈顶火车出站? 老师:闭嘴!) 就像这样: 出站<---    <--进站 |车| |站| |__| 现在请你按<字典序>输出前20种可能的出栈方案. 输入 一个

栈之火车进站和出站

Problem Description As the new term comes, the Ignatius Train Station is very busy nowadays. A lot of student want to get back to school by train(because the trains in the Ignatius Train Station is the fastest all over the world ^v^). But here comes

1683 车厢重组 codevs

http://codevs.cn/problem/1683/ 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 白银 Silver 题目描述 Description 在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转.一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序.于是他就负责用这座桥将进站的车厢按车厢号从小到大排列.他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序

堆栈应用(三):火车车厢重排

1.问题描述 一列货运列车共有 n节车厢,每节车厢将停放在不同的车站.假定 n个车站的编号分别为1 ~n,货运列车按照第 n站至第 1 站的次序经过这些车站.车厢的编号与它们的目的地相同.为了便于从列车上卸掉相应的车厢,必须重新排列车厢,使各车厢从前至后按编号 1 到n的次序排列.当所有的车厢都按照这种次序排列时,在每个车站只需卸掉最后一节车厢即可. 为了重排车厢,需从前至后依次检查入轨上的所有车厢.如果正在检查的车厢就是下一个满足排列要求的车厢,可以直接把它放到出轨上去.如果不是,则把它移动到

codevs 1683 车厢重组(水题日常)

时间限制: 1 s 空间限制: 1000 KB 题目等级 : 白银 Silver 题目描述 Description 在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转.一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序.于是他就负责用这座桥将进站的车厢按车厢号从小到大排列.他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序,输入初始的车厢顺序,计算最少用多少步就能将车厢排序. 输入描