题目:


题意:t组输入,每组六个字符串,从每个字符串中选一个字母,问是否能组成"harbin";
思路:将六个字符串处理成6*6的矩阵,用dfs找“harbin”;
AC代码
#include <bits/stdc++.h>
using namespace std;
#define maxx 2000004
char a[maxx];
int vis[10][10],f;
bool v[10];
void dfs(int num)//dfs
{
if(num>=7)
{
f=1;
return ;
}
for(int i=1; i<=6; i++)
{
if(vis[i][num]&&!v[i])//从i=1开始到i=6跑一遍
{
v[i]=1;//表示被访问
dfs(num+1);
v[i]=0;//dfs回溯
}
}
}
int main()
{
int t;
cin>> t;
while(t--)
{
memset(vis,0,sizeof(vis));//初始化为0
memset(v,0,sizeof(v));//初始化为0,表示未被访问过
for(int i=1; i<=6; i++)
{
cin>>a;//在循环里面输入6个字符串
int len =strlen(a);
for(int j=0; j<len; j++)//建立6×6的矩阵并标记
{
if(a[j]=='h')
vis[i][1]=1;
else if(a[j]=='a')
vis[i][2]=1;
else if(a[j]=='r')
vis[i][3]=1;
else if(a[j]=='b')
vis[i][4]=1;
else if(a[j]=='i')
vis[i][5]=1;
else if(a[j]=='n')
vis[i][6]=1;
}
}
f=0;
dfs(1);
if(f)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
817

被折叠的 条评论
为什么被折叠?



