DFS(深度优先搜索)
讲究D:深度
常指利用递归函数方便地实现暴力枚举的算法
该类搜索算法的特点在于,将要搜索的目标分成若干「层」,每层基于前几层的状态进行决策,直到达到目标状态。(深度)
主要理解代码:
给个例题:
把正整数n分解为成四个整数,或者m个整数。
因为需要分解为m个数字
我们把每个数字当作为一层
那么每一次的变化下面都要接着变化。
逐级向下改变即可
dfs(int n,int i,int a) //剩余数值为n的数字正在分配第i个数字,j表示前一层的正整数,以确保正整数递增;
int m, arr[103]; // arr 用于记录方案
void dfs(int n,int i,int a) {//剩余数值为n的数字正在分配第i个数字,j表示前一层的正整数,以确保正整数递增;
if (n==0) {
for (int j = 1;j<=i-1;++j) printf("%d",arr[j]);
printf("\n");
}
if (i <= m) {
for (int j=a;j<=n;++j) {
arr[i]=j;
dfs(n-j,i+1,j);
}
}
}
scanf("%d%d", &n,&m);
dfs(n,1,1);
二、总结及计划
最近状态欠佳,文章质量不高。
接下来会更努力。
好,完美结束。