火车进站问题
给出,出火车站序列比如5 4 1 2 3 ,实际上我们要做的是将准备进站的序列1 2 3 4 5 分块放进一个栈式结构,然后出来,出来的顺序:栈顶要和目标的序列的第一个相同。否则失败。
#include<iostream>
#include<stack>
using namespace std;
/*2020/7/4*/
int main() {
stack<int>s;
int n;
while(cin>>n&&n){
int a[1005],b[1005];//b带有结束符号
while(cin>>a[1]&&a[1]){
for(int i=2;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++)b[i]=i;
b[n+1]=9999;//安排一个大数作为结束;
int i=1,j=1;//标记
bool flag=true;
while(i<=n) {
while(true){
if(a[i]<b[j])break;
s.push(b[j]);
j++;
}
if(s.top()==a[i]){
s.pop();
i++;//弹出i
}
else {
flag=false;
break;
}
}
if(flag)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
cout<<endl;
}
return 0;
}

本文介绍了一种算法,用于判断给定的出站序列是否能通过特定的栈操作从初始序列中得到。通过对比栈顶元素与目标序列首元素,实现对序列可行性的检查。

854

被折叠的 条评论
为什么被折叠?



