#include #include using namespace std;

bool checkOrder(int n, int* order) { stack station; // 中转站C int nextCar = 1; // 下一辆要驶出的车厢编号 for (int i = 0; i < n; i++) { // 当前车厢符合顺序,直接驶出 if (order[i] == nextCar) { nextCar++; } // 当前车厢不符合顺序,尝试从中转站驶出 else if (!station.empty() && station.top() == nextCar) { station.pop(); nextCar++; i--; // 重新检查当前车厢是否符合顺序 } // 当前车厢不符合顺序,从A方向驶入中转站 else { station.push(order[i]); } } // 检查中转站中剩余的车厢是否能按照顺序驶出 while (!station.empty() && station.top() == nextCar) { station.pop(); nextCar++; } // 如果所有车厢都按照顺序驶出,则返回true,否则返回false return nextCar == n + 1; }

int main() { int n; cin >> n; int* order = new int[n]; for (int i = 0; i < n; i++) { cin >> order[i]; } bool result = checkOrder(n, order); if (result) { cout << "YES" << endl; } else { cout << "NO" << endl; } delete[] order; return 0; }

C++ 算法:判断车厢驶出顺序是否可行 - 栈模拟中转站

原文地址: https://www.cveoy.top/t/topic/pzbA 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录