题目:第二周任务:二叉树+并查集 - 题单 - 洛谷 | 计算机科学教育新生态 (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;
}
思路:
- 输入:首先,通过
scanf
函数从标准输入读取两个字符串a
和b
。 - 准备:获取字符串
a
的长度l
。 - 搜索:使用深度优先搜索(DFS)算法在字符串
a
中查找字符串b
。这个搜索过程是递归的,通过递归地尝试字符串b
的不同部分在字符串a
中的位置来实现。 - 匹配与打印:一旦找到匹配的字符,就打印出来。
- 返回:主函数返回0,程序结束