题目描述
给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号。要求以字典序排序输出火车出站的序列号。
输入描述:
有多组测试用例,每一组第一行输入一个正整数N(0<N<10),第二行包括N个正整数,范围为1到9。
输出描述:
输出以字典序从小到大排序的火车出站序列号,每个编号以空格隔开,每个输出序列换行,具体见sample。
示例1
输入
3 1 2 3
输出
1 2 3 1 3 2 2 1 3 2 3 1 3 2 1
代码:
//第七十五题 火车进站
#include<iostream>
#include <algorithm>
using namespace std;
int main()
{
int n;
while (cin >> n)
{
int a[11]{ 0 }, mp[11][11]{ 0 };
for (int i = 0; i < n; i++)
cin>>a[i];
for (int i = 0; i < n; i++)
for (int j = i + 1; j < n; j++)
mp[a[i]][a[j]] = 1;
sort(a, a + n);
do
{
bool flag = true;
for (int i = 0; i < n && flag; i++)
for (int j = i + 1; j < n && flag; j++)
if (mp[a[j]][a[i]])
for (int k = j + 1; k < n && flag; k++)
if (mp[a[j]][a[k]] && mp[a[k]][a[i]])
flag = false;
if (flag)
{
for (int i = 0; i < n - 1; i++)
cout<<a[i]<<" ";
cout << a[n - 1]<<endl;
}
} while (next_permutation(a, a + n));
}
return 0;
}