题目:P1827 [USACO3.4] 美国血统 American Heritage - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include <stdio.h>
#include <string.h>
// 定义一个深度优先搜索的函数,用于在字符串a中查找字符串b
void dfs(char *a, char *b, int l1, int l2, int l3, int l4) {
// 如果字符串b的长度大于字符串a的长度,则直接返回,因为无法匹配
if (l1 > l2 || l3 > l4) return;
// 遍历字符串a中从l1到l2的部分
for (int i = l1; i <= l2; i++) {
// 如果在a[i]处找到了与b[l3]相匹配的字符
if (a[i] == b[l3]) {
// 递归调用dfs函数,搜索a中从l1到i-1的部分,以及b中从l3+1到l3+i-l1的部分
dfs(a, b, l1, i - 1, l3 + 1, l3 + i - l1);
// 递归调用dfs函数,搜索a中从i+1到l2的部分,以及b中从l3+i-l1+1到l4的部分
dfs(a, b, i + 1, l2, l3 + i - l1 + 1, l4);
printf("%c", a[i]);
}
}
}
int main() {
char a[100], b[100];
scanf("%s%s", a, b);
int l = strlen(a); // 获取字符串a的长度
dfs(a, b, 0, l - 1, 0, l - 1); // 从字符串a的第一个字符开始,到最后一个字符结束,以及字符串b的第一个字符开始,到最后一个字符结束,进行深度优先搜索
return 0;
}