栈 铁轨
来源:互联网 发布:多岛遗传算法 编辑:程序博客网 时间:2024/03/29 17:37
不用栈#include<stdio.h>const int maxn=1000+10;int n,target[maxn];//用来读入数据;int main(){ while(scanf("%d",&n)==1) { int stack[maxn],top=0;//stack用于作为栈; int A=1,B=1; for(int i=1;i<=n;i++) scanf("%d",&target[i]); int ok=1; while(B<=n) { if(A==target[B]){A++;B++;}//如果A=B那就直接放行; else if(top&&stack[top]==target[B]){top--;B++;}//如果栈不空并且栈中顶端元素为所需要的顺序元素那就放行; else if(A<=n)stack[++top]=A++;//栈中元素及第一个未进栈的元素都不符要求将未进栈的第一个放入栈中;如果A都已经大于n了就可以判定结束了; else {ok=0;break;}//如果找要出栈的第n个元素时A就已经大于n了,那么说明这种出站方式是不可能的; } printf("%s\n",ok?"Yes":"No"); } return 0;}#include<cstdio>#include<stack>//表明要调用关于栈的文件吧;using namespace std;const int maxn=1000+10;使用栈int n,target[maxn];int main(){ while(scanf("%d",&n)==1) { stack<int> s;//生成一个元素为int的栈吧; int A=1,B=1; for(int 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.pop();B++;}//如果S不为空栈并且s的栈顶元素正好为需要的B元素就直接把顶端元素放出去; else if(A<=n)s.push(A++);//还有合法的未进栈元素就让其进栈; else {ok=0;break;} } printf("%s\n",ok?"Yes":"No"); } return 0;}