判断出栈序列是否合理
2012-09-16 21:49
204 查看
题目描述(即判断是否是合理的出栈序列问题?)
有顺序排列的1,2,
3,…,n节车厢在入站口等待调度。车站设置了一个栈作为缓冲,这样的话只可能进行下列两个操作之一:
(1)如果还有车厢在入站口,将最前面的入栈缓冲
(2)将栈顶的车厢驶出车站
给定一个1至n的排列,问其作为出站序列是否合法。
注意:入站顺序为1,2, 3,…,n,即1先入栈...,n最后入栈。
输入
输入包含若干测试用例。每一个测试用例由多行组成。第一行是两个整数n(1<=n <= 100)和m,n表示入站序列为1至n。m表示随后有m行出站序列。
当n,m均为0时表示输入结束。
输出
对应每一个出站序列,合法则输出一行YES,否则输出一行NO。
样例输入
3
6
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
0
0
样例输出
YES
YES
YES
YES
NO
YES
方法:(1)模拟入栈和出栈的过程,对每种情况逐个判断;(2)判断“大小中”的情况,如果出现,则为非法序列。
有顺序排列的1,2,
3,…,n节车厢在入站口等待调度。车站设置了一个栈作为缓冲,这样的话只可能进行下列两个操作之一:
(1)如果还有车厢在入站口,将最前面的入栈缓冲
(2)将栈顶的车厢驶出车站
给定一个1至n的排列,问其作为出站序列是否合法。
注意:入站顺序为1,2, 3,…,n,即1先入栈...,n最后入栈。
输入
输入包含若干测试用例。每一个测试用例由多行组成。第一行是两个整数n(1<=n <= 100)和m,n表示入站序列为1至n。m表示随后有m行出站序列。
当n,m均为0时表示输入结束。
输出
对应每一个出站序列,合法则输出一行YES,否则输出一行NO。
样例输入
3
6
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
0
0
样例输出
YES
YES
YES
YES
NO
YES
方法:(1)模拟入栈和出栈的过程,对每种情况逐个判断;(2)判断“大小中”的情况,如果出现,则为非法序列。
#include<iostream> #include<fstream> #include<vector> #include<stack> using namespace std; bool check(stack<int> & s, const vector<int> & in, const vector<int> & out, int n) { int j = 0; //用于表示out的当前值 for(int i = 0; i < n; i++) { s.push(in[i]); while(!s.empty() && s.top() == out[j]) //这里用while循环来保证有可以出的值时,可以连续出栈 { s.pop(); j++; } } //如果当前栈不为空,那么确定该组值不合法。 if(s.empty()) return true; else return false; } int main(int argc, char **argv) { ifstream fin(argv[1]); int n, m; while(1) { fin >> n >> m; if( n == 0 && m == 0) break; vector<int> in; for(int i = 1; i <= n; i++) in.push_back(i); int temp; for(int i = 0; i < m; i++) { stack<int> s; //局部变量,每次循环后被重置为空 vector<int> out; for(int i = 0; i < n; i++) { fin >> temp; out.push_back(temp); } if(check(s, in, out, n)) cout << "YES" << endl; else cout << "NO" << endl; } } system("pause"); return 0; }
相关文章推荐
- 1051. Pop Sequence (25) 判断出栈序列是否合理
- 判断出栈序列是否合理
- 判断出栈序列是否正确
- 判断出栈序列是否合法
- 判断出栈序列是否合法
- 判断一个序列是否为另一个栈的出栈序列(栈的压入、弹出序列)
- 判断出栈序列是否合法
- 判断出栈序列是否合法
- Train Problem——判断输出序列是否是输入序列的出栈顺序
- 给定入栈序列判断给定出栈序列是否合法(Exercise1_3_45,java)
- 给定入栈序列判断给定出栈序列是否合法
- 如何判断一个序列是否为另一个序列的出栈序列
- 已知入栈顺序,判断某一序列是否为其合法出栈序列!
- (栈的应用5.2.1)POJ 1363 Rails(判断出栈序列是否正确)
- 每日一算法(已知进栈序列 判断出栈序列是否合法)
- HDU 1022 Train Problem I(判断出栈序列是否可行)
- 剑指offer-给出一个入栈序列和一个出栈序列,判断出栈序列是否合法。
- flag46 判断出栈序列是否合法的讨论。
- POJ 1363 Rails 判断出栈序列是否合法
- 面试题21:包含min函数的栈,面试题22:判断某一序列是否是出栈序列