题目描述 重庆站位于重庆市渝中区菜袁路,又名菜园坝火车站,于 1952 年 7 月投入使用。2022 年 6 月 19 日,随着最后一班开往哈尔滨西的 K1064 次列车从重庆站发出后,重庆站完 成了 70 年铁路客运的使命,宣布正式停止运营。重庆站的结构如下图所示; 从图中可以发现重庆站的站台只能从同一端进出,现在有 n 列火车,编号为 1~n 按照 1~n 的顺序进同一个站台,假设站台长度一定能容纳 n 列火车,请你求出可能的出站顺 序. 输入描述 输入包含 1 行,为一个整数 n. 输出描述 对于每个测试用例,按照字典序升序输出前 20 个可能的出站顺序(若不满 20 个则输出 所有可能的出站顺序),每个序列占一行,序列中数字间用空格隔开 示例 输入 输出 3 1 2 3 1 3 2 2 1 3 2 3 1 3 2 1 数据范围 1 ≤ �
#include <iostream>
#include <stack>
using namespace std;
//bool flag[3] = {false}; //标记
//int number[3];
//int n = 3;
bool chick(int * array/*[3]*/,int sum)
{
stack <int> st;
int j = 0;
for (int i = 0; i < sum; i++)
{
st.push(i + 1);
while (st.size() && array[j] == st.top())
{
st.pop();
j++;
}
}
if (st.size())
{
return false;
}return true;
}
void printA(int A, int sum,bool* flag, int* number)
{
if (A == sum)
{
if (chick(number,sum))
{
for (int k = 0; k < sum; k++)
{
cout << number[k] << " ";
}
cout << endl;
};
}
else
{
for (int i = 0; i < sum; i++)
{
if (!flag[i])
{
number[A] = i + 1;
flag[i] = true;
printA(A+1,sum,flag,number);
flag[i] = false;
}
}
}
}
int main()
{
int sum;
cin >> sum;
int* number = new int[sum];
bool* flag = new bool[sum] {false};
for (int i = 0; i < sizeof(flag); i++)
{
flag[i] = false;
}
printA(0, sum,flag,number);
}
≤ 15