代码:
#include <stdio.h> #include <string.h> int map[405][405]; // 注意数组大小 char a[201], b[201], c[405]; int len1, len2, len3, ans; void dfs(int x, int y, int k) //三个元素同时进行搜索 { if (map[x][y]) return; /*记忆化搜索*/ map[x][y] = 1; /*剪枝*/ if (k == len3) ans = 1; if (x < len1&&a[x] == c[k]) dfs(x + 1, y, k + 1); if (y < len2&&b[y] == c[k]) dfs(x, y + 1, k + 1); } int main() { int t, D; scanf("%d", &t); while (t--) { scanf("%s%s%s", &a, &b, &c); len1 = strlen(a); len2 = strlen(b); len3 = strlen(c); memset(map, 0, sizeof(map)); ans = 0; dfs(0, 0, 0); printf("Data set %d: ", D++); if (ans) puts("yes"); else puts("no"); } return 0; }