铁轨问题 判断是否为出栈顺序
生活随笔
收集整理的這篇文章主要介紹了
铁轨问题 判断是否为出栈顺序
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
#include <cstdio>
#include <stack>
using namespace std;
const int MAX=1000+10;
int target[MAX];
stack<int> s; int main()
{ int n; printf("請輸入火車的車廂數(shù):"); while(scanf("%d",&n)==1) { int i; printf("請輸入火車從B出站的順序:"); for(i=1;i<=n;i++) scanf("%d",&target[i]); int A=1,B=1,ok=0; while(B<=n) { if(A==target[B]){ A++; B++; }else if(!s.empty()&&s.top()==target[B]){ s.pop(); B++; }else if(A<=n) { s.push(A++); }else{ ok=1; break; } } printf("可以按此順序出站:%s\n",ok?"no":"yes"); printf("請輸入火車的車廂數(shù):"); } return 0;
}
某城市有一個火車站,鐵軌鋪設(shè)如圖所示,有n節(jié)車廂從A方向駛?cè)胲囌?#xff0c;按進站順序編號為1至n。你的任務(wù)是判斷是否能讓它們按照某種特定的順序進入B方向的鐵軌并駛出車站。為了重組車廂,你可以借助中轉(zhuǎn)站C。這是一個可以停放任意多節(jié)車廂的車站,但由于末端封頂,駛?cè)隒的車廂必須按照相反的順序駛出車站。例如:出站順序(5,4,1,2,3)是不可能的,而(5,4,3,2,1)是可能的。對于每節(jié)車廂,一旦從A移入C,就不能再回到A了;一旦從C移入B,就不能回到C了。換句話說,在任意時刻,只有兩種選擇A->C和C->B。
???????????????????????
某城市有一個火車站,鐵軌鋪設(shè)如圖所示,有n節(jié)車廂從A方向駛?cè)胲囌?#xff0c;按進站順序編號為1至n。你的任務(wù)是判斷是否能讓它們按照某種特定的順序進入B方向的鐵軌并駛出車站。為了重組車廂,你可以借助中轉(zhuǎn)站C。這是一個可以停放任意多節(jié)車廂的車站,但由于末端封頂,駛?cè)隒的車廂必須按照相反的順序駛出車站。例如:出站順序(5,4,1,2,3)是不可能的,而(5,4,3,2,1)是可能的。對于每節(jié)車廂,一旦從A移入C,就不能再回到A了;一旦從C移入B,就不能回到C了。換句話說,在任意時刻,只有兩種選擇A->C和C->B。
???????????????????????
現(xiàn)在給你一種1到n的排列,請你判斷是否是題目描述的一種可能,如果是請輸出yes,否則輸出no
總結(jié)
以上是生活随笔為你收集整理的铁轨问题 判断是否为出栈顺序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算一算是一年中的第几天
- 下一篇: Mac OS X中MacPorts安装和