0
点赞
收藏
分享

微信扫一扫

火车进出站

题目描述 重庆站位于重庆市渝中区菜袁路,又名菜园坝火车站,于 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);

 

}

举报

相关推荐

0 条评论