深度优先搜索是一种树的遍历方式。与此对应的是广度优先搜索。
?
二叉树的优先搜索:
?
如何把一个数学问题转换为树的深度优先搜索问题:
例如:各位数之和为偶数的一个10位二进制数有几个。
我们来分析一下这个问题,首先一共有10位数,然后每一位数都只有两种状态0,1
这可以看做是一个深度为10的一个二叉树,然后用树的深度优先搜索即可解决问题。
?
用C语言实现的代码结构
void DFS(int depth) { ????if(depth==10)????????//递归出口 ????{ ????????//do something????????//对全部层进行操作 ????????return; ????} ????for(int i=0; i<2; i++)????????//这是一个二叉树 ????{ ????????//do something????????//对该层进行操作 ????????DFS(depth+1);????????//进入下一层 ????} } |
?
完整代码
#include <iostream> ? using namespace std; ? int a[10]={}; int count=0; ? void DFS(int depth) { ????if(depth==10) ????{ ????????int sum=0; ????????for(int i=0;i<10;i++) sum+=a[i]; ????????if(sum%2==0) ????????{ ????????????count++; ????????} ????????return; ????} ????for(int i=0;i<2;i++) ????{ ????????a[depth] = i; ????????DFS(depth+1); ????} } ? int main() { ????DFS(0); ????cout << count << endl; ????return 0; } |
原文地址:https://www.cnblogs.com/jawide/p/12053764.html