深度优先搜索是一种树的遍历方式。与此对应的是广度优先搜索。
二叉树的优先搜索:
如何把一个数学问题转换为树的深度优先搜索问题:
例如:各位数之和为偶数的一个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; } |