您的位置:首页 > 其它

hdu 1501 Zipper

2011-07-31 09:02 260 查看
一道搜索题,不过用了一个visit数组比较重要~~值得学习!!

题目大意:给3个字符串,问第三个串能不能由前两个构成,在不改变相互顺序的情况下!

visit标记数组很重要,去掉must超时~~

直接贴代码,代码很精简:

View Code

# include<stdio.h>
# include<string.h>
char str1[205],str2[205],str[405],flag,visit[205][205];
void dfs(int i,int j,int k)
{
if(str[i]==0 && str1[j]==0 && str2[k]==0) {flag=1;return;}
if(str[i]!=str1[j] && str[i]!=str2[k]) return;
if(visit[j][k]) return;///如果该状态已经访问过了,那就无需再访问了
visit[j][k]=1;
if(str[i]==str1[j])    dfs(i+1,j+1,k);
if(flag) return;
if(str[i]==str2[k])    dfs(i+1,j,k+1);
}
int main()
{
int t,ncase;
scanf("%d",&ncase);
for(t=1;t<=ncase;t++)
{
scanf("%s%s%s",str1,str2,str);
memset(visit,0,sizeof(visit));
flag=0;
dfs(0,0,0);
printf("Data set %d: ",t);
if(flag) printf("yes\n");
else printf("no\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: