题目链接:https://vjudge.net/problem/UVA-1262
直接暴力搜索,直到找到匹配的字符串
#include<bits/stdc++.h>
using namespace std;
int k;
vector<char> v[10];
int vis[6][30];
deque<int> q;
int num;
void print_ans(){
char a;
while(!q.empty()){
a=q.front();
q.pop_front();
printf("%c",a);
}
printf("\n");
}
int dfs(int pos,int& num){
if(pos==5){
num++;
if(num==k)
print_ans();
return 0;
}
int temp=pos;
for(int i=0;i<=v[temp].size()-1;i++){
q.push_back(v[temp][i]);
dfs(pos+1,num);
if(num==k)
return num;
q.pop_back();
}
return num;
}
int main(){
int n;
scanf("%d",&n);
char a;
while(n--){
num=0;
memset(vis,0,sizeof(vis));
scanf("%d",&k);
a=getchar();
q.clear();
for(int i=0;i<10;i++)
v[i].clear();
for(int i=0;i<=5;i++){
for(int j=0;j<=4;j++){
a=getchar();
vis[j][a-'A']=1;
}
getchar();
}
for(int i=0;i<=5;i++){
for(int j=0;j<=4;j++){
a=getchar();
if(vis[j][a-'A'])
v[j].push_back(a);
vis[j][a-'A']=0;
}
getchar();
}
for(int i=0;i<=4;i++)
sort(v[i].begin(),v[i].end());
int o=dfs(0,num);
if(o<k)
printf("NO\n");
}
}