铁轨(栈)

来源:互联网 发布:碧欧泉淘宝是正品吗 编辑:程序博客网 时间:2024/04/25 10:24

某城有一火车站,有n节车厢从A方向驶入车站,按进站顺序为1~n,要求:让它按照某种特定顺序进入B方向的铁轨并驶出车站。其中有一个中转站C,用来重组车厢。

方法一:

按照数组方式完成:

#include<stdio.h>#define MAXN 100+10int n,target[MAXN];int main(){int i;while(scanf("%d",&n)){int stack[MAXN];for(i=1;i<=n;i++){scanf("%d",&target[i]);}int A=1,B=1;int ok=1;int top=0;while(B<=n){if(A==target[B]){A++;B++;}else   if(top&&stack[top]==target[B])   {   top--;   B++;   }   else     if(A<=n)   {   stack[++top]=A++;   }   else     {     ok=0;     break;     } }    printf("%s\n",ok?"Yes":"No");5    }return 0;} 


方法二:

按照栈的方式:



#include<stdio.h>#include<stack> #include<algorithm>#define MAXN 1000+10int target[MAXN];using namespace std;int main(){ int n,i; while(scanf("%d",&n)) {  stack<int> s;  int A=1,B=1;  for(i=1;i<=n;i++)  {   scanf("%d",&target[i]);  }  int ok=1;  while(B<=n)  {   if(A==target[B])   {    A++;    B++;    }   else      if(!s.empty() && s.top() == target[B] )      {       s.top();       B++;      }      else       if(A<=n)      {       s.push(A++);      }      else      {       ok=0;       break;      }  }  printf("%s\n",ok?"Yes":"No"); } return 0; }



0 0
原创粉丝点击