栈例题-火车车厢重组

Posted wanjinliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈例题-火车车厢重组相关的知识,希望对你有一定的参考价值。

一组火车车厢编号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

以上是关于栈例题-火车车厢重组的主要内容,如果未能解决你的问题,请参考以下文章

车厢重组

P1116 车厢重组

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

1683 车厢重组

1683 车厢重组 codevs

紫书140例题6-2 铁轨&&UVa514