창고예제-기차칸 재편성

11183 단어
기차 객실 번호 1 - n
오른쪽에서 왼쪽으로 역을 지나가다
각 객차는 임시로 역에 들어갈 수 있고, 주선에 있는 몇 개의 객차를 놓친 후에 다시 길을 따라 갈 수 있다.
객차 수와 원하는 객차 순서를 입력하여 가능한지 판단한다.
CCF 교재 하권 P149, 예 6.9
코드는 다음과 같습니다.
 1 #include 
 2 #include <string>
 3 #include 
 4 #include 
 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<
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<
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)
55     {
56         b[i]=i+1;
57     }
58     for(int i=0; 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

좋은 웹페이지 즐겨찾기