码迷,mamicode.com
首页 > 其他好文 > 详细

深度优先搜索(DFS: Depth First Search)

时间:2019-12-17 13:13:47      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:行操作   方式   round   int   ++   strong   广度优先搜索   image   return   

深度优先搜索是一种树的遍历方式。与此对应的是广度优先搜索

?

二叉树的优先搜索:

技术图片

?

如何把一个数学问题转换为树的深度优先搜索问题:

例如:各位数之和为偶数的一个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;

}

深度优先搜索(DFS: Depth First Search)

标签:行操作   方式   round   int   ++   strong   广度优先搜索   image   return   

原文地址:https://www.cnblogs.com/jawide/p/12053764.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!