C++算法题解:死胡同汽车倒车问题
C++算法题解:死胡同汽车倒车问题
问题描述
假设有一个只能容纳一辆汽车通过的死胡同,多辆汽车先后进入死胡同,导致最先进入的汽车最后才能倒出。给定汽车进入死胡同的顺序和一个预期的倒车顺序,判断汽车是否能够按照预期的顺序全部倒出。
输入格式
- 首先输入一个整数 T,表示测试数据的组数。* 然后是 T 组测试数据。* 每组测试数据首先输入一个正整数 n(n≤10),代表进入死胡同的汽车数量。* 然后输入 2n 个整数,其中前 n 个整数表示汽车进入死胡同的顺序,后 n 个整数表示汽车预期的倒车顺序。
输出格式
- 对于每组测试数据,判断汽车能否按照预期顺序倒出死胡同。* 若能,则输出 'Yes',否则输出 'No'。(输出不包含引号)
C++代码实现cpp#include #include #include using namespace std;
bool canExit(int n, vector
while (exitIdx < n) { if (!st.empty() && st.top() == carExit[exitIdx]) { st.pop(); exitIdx++; } else if (arrivalIdx < n) { st.push(carArrival[arrivalIdx]); arrivalIdx++; } else { return false; } }
return true;}
int main() { int T; cin >> T;
while (T--) { int n; cin >> n;
vector<int> carArrival(n); vector<int> carExit(n);
for (int i = 0; i < n; i++) { cin >> carArrival[i]; }
for (int i = 0; i < n; i++) { cin >> carExit[i]; }
if (canExit(n, carArrival, carExit)) { cout << 'Yes' << endl; } else { cout << 'No' << endl; } }
return 0;}
代码解释
-
canExit函数: - 使用栈st模拟死胡同,后进先出。 -arrivalIdx和exitIdx分别表示进入序列和倒车序列的当前索引。 - 遍历倒车序列carExit: - 若栈顶元素等于当前需倒出的汽车,则弹出栈顶元素,exitIdx加 1。 - 否则,若还有未进入死胡同的汽车,则将下一辆汽车入栈,arrivalIdx加 1。 - 若以上条件均不满足,则无法按照预期顺序倒车,返回false。 - 遍历结束后,若栈为空,则表示所有汽车已成功倒出,返回true。 -
main函数: - 读取测试数据组数T。 - 循环处理每组测试数据: - 读取汽车数量n,进入序列carArrival和倒车序列carExit。 - 调用canExit函数判断能否按照预期顺序倒车,并输出结果。
总结
本题利用栈模拟死胡同的后进先出特性,巧妙地解决了汽车倒车问题。通过分析进入和倒车顺序,可以判断汽车是否能够顺利倒出。
原文地址: https://www.cveoy.top/t/topic/cDob 著作权归作者所有。请勿转载和采集!