排列组合问题,stl的next_permutation搞定
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
const int maxn = 100;
bool mat[maxn][maxn];
int main(){
int ncase;
cin >> ncase;
getchar();
int T = 1;
vector<char> vv;
while(ncase--){
getchar();
if(!T) {
cout<<endl;
}
T = 0;
vv.clear();
memset(mat,0,sizeof(mat));
string st;
getline(cin,st);
for(int i = 0; i < st.size();i +=2){
vv.push_back(st[i]);
//cout<<st<<endl;
}
sort(vv.begin(),vv.end());
getline(cin,st);
for(int i = 0; i < st.size(); i += 4){
mat[st[i+2]-'A'][st[i]-'A'] = 1;
//cout<<i+2<<" "<<i<<endl;
//cout<<st[i+2]<<" "<<st[i]<<endl;
}
int cnt = 0;
do{
bool flag = 1;
for(int i = 0; i < vv.size(); i++){
for(int j = i+1; j < vv.size(); j++){
if(mat[vv[i]-'A'][vv[j]-'A']){
flag = 0;
break;
}
}
}
if(flag){
cnt++;
for(int i = 0; i < vv.size()-1; i++){
cout<<vv[i]<<" ";
}
cout<<vv[vv.size()-1]<<endl;
}
}while(next_permutation(vv.begin(),vv.end()));
if(cnt == 0){
cout<<"NO"<<endl;
}
}
}
/*
2
A B F G
A<B B<F
A B F G
A<B B<F
*/