//我刚开始以为好难,其实就是一个DFS,必须记录走过的路径。用一个vis[max][max],数组标记走没走过,走过就是1,没走过就是0.这是关键。
AC代码:
#include<stdio.h>
#include<string.h>
#define N 1005
char a[N];
char b[N];
char c[N];
int vis[N][N];
int ok;
int L;
void dfs(int x,int y,int z)
{
if(ok==1||z==L)
{
ok=1;
return;
}
if(vis[x][y]!=0)
return;
vis[x][y]=1;
if(a[x]==c[z])
{
dfs(x+1,y,z+1);
}
if(b[y]==c[z])
{
dfs(x,y+1,z+1);
}
return;
}
int main()
{
int x;
scanf("%d",&x);
int cnt=1;
while(x--)
{
memset(vis,0,sizeof(vis));
scanf("%s%s%s",a,b,c);
ok=0;
L=strlen(c);
dfs(0,0,0);
if(ok)
{
printf("Data set %d: yes\n",cnt++);
}
else
{
printf("Data set %d: no\n",cnt++);
}
}
return 0;
}