标签:desc nes article sum tree ase length its include
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1501
一:原题内容
3 cat tree tcraete cat tree catrtee cat tree cttaree
Data set 1: yes Data set 2: yes Data set 3: no
二:分析理解
第三个字符串能否由前两个字符串依照原有顺序不变的原则交叉构成。须要注意的是,visit数组元素值为1时,表示该位置已被訪问过,下次无需訪问。
三:AC代码
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
#include<iostream>
#include<string>
#include<string.h>
using namespace std;
string str1, str2, str3;
int len1, len2, len3;
bool flag;//为真时,表示能够输出“yes”
int visit[201][201];//标记数组,默认都是0
void DFS(int i, int j, int k);
int main()
{
int N;
cin >> N;
for (int i = 1; i <= N; i++)
{
memset(visit, 0, sizeof(visit));
flag = false;
cin >> str1 >> str2 >> str3;
len1 = str1.length();
len2 = str2.length();
len3 = str3.length();
DFS(0, 0, 0);
if (flag)
cout << "Data set " << i << ": " << "yes\n";
else
cout << "Data set " << i << ": " << "no\n";
}
return 0;
}
void DFS(int i, int j, int k)
{
if (flag || visit[i][j])//假设为真或该点已被訪问过
return;
if (k == len3)//由于依据题意len1+len2=len3
{
flag = true;
return;
}
visit[i][j] = 1;
if (i < len1 && str1[i] == str3[k])
DFS(i + 1, j, k + 1);
if (j < len2 && str2[j] == str3[k])
DFS(i, j + 1, k + 1);
}
标签:desc nes article sum tree ase length its include
原文地址:http://www.cnblogs.com/blfbuaa/p/7043688.html