显示代码纯文本
//子任务1:枚举每一种排列O(N!)
#include <bits/stdc++.h>
using namespace std;
int T,n;
int main() {
freopen("permutation.in","r",stdin);
freopen("permutation.out","w",stdout);
cin >> T;
while (T--) {
vector<int> num,h;//初始化
cin>>n;
for(int i=1;i<=n;i++)num.push_back(i);//字典序第1个排列1~n
for(int i=1;i<n;i++)
{
int x;
cin>>x;h.push_back(x);//目标状态
}
int ok=0;//是否找到目标
do{
vector<int> v=num,t;//用num初始化v
//for(int i:v)cout<<i<<' ';//遍历vector元素
while(v.size()>1)//当v元素个数>1
{
if(v.front()>v.back())
{
v.erase(v.begin());//删除头元素
t.push_back(v.front());//新头,即原第二个元素
}
else
{
v.pop_back();//删除末尾元素
t.push_back(v.back());//新末尾,原次末尾
}
}
if(t==h)//得到的t和目标状态相同
{
ok=1;//标记更新,结束
for(int i:num)cout<<i<<' ';//输出答案
cout<<endl;
}
//next_permutation 产生num中元素的下一种排列
}while(!ok && next_permutation(num.begin(),num.end()));
if(!ok)cout<<-1<<endl;//不能得到目标状态
}
return 0;
}