1. DFS简介

深度优先搜索算法(英语:Depth-First-Search,简称DFS)是一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条件,搜索将回溯到发现节点v的那条边的起始节点。整个进程反复进行直到所有节点都被访问为止。属于盲目搜索,最糟糕的情况算法时间复杂度为O(!n),DFS搜索的过程访问可以称之为DFS序。

如图:

对于一颗这样的树,我们的DFS序可以为:abdefc(即时对于同一颗的树,其DFS序不一定唯一),即访问a之后访问a的子结点b,再在b的基础上依次访问它的子结点def,最后回退到a处访问c。

这与前文花大篇幅介绍的先序,中序,后续遍历如出一辙,唯一的不同就是这样的一棵树并不只存在有左右两个结点,它可以是多枝的。

而即时对于一颗深度为n的二树,在没有任何优化的情况下适用DFS去搜索访问数据,其算法的时间复杂度也高达O(2^n),在数据较大的情况下DFS是无法满足程序的时间要求,这就会涉及到一个思路——剪枝,即通过现有的数据判断接下来的数据无法再满足解,直接将当前结点以后的所有数据舍弃,遍历不再访问,通过精心设计的剪纸可以使得DFS搜索的效果得到很大提升。

2. 模板:

对于一个标准的DFS模板而言,其包括了以下的内容:bool check(参数)

{

if(满足条件)

return true ;

return false;

}

void dfs(int step)

{

判断边界

{

相应操作

}

尝试每一种可能

{

满足check条件

标记

继续下一步dfs(step+1)

恢复初始状态(回溯的时候要用到)

}

}

3. 相关习题

三角形(注,其还涉及了一点动态规划的思维):

c语言 dfs,DFS(深度优先搜索)相关推荐

  1. 蓝桥杯笔记:DFS(深度优先搜索)解决问题

    DFS: 深度优先搜索: 访问当前的元素后,递归访问元素的邻接元素(找出所有下一步的可能元素,判断是否能访问),撤回当前元素访问 dfs(当前状态) {//递归终止条件if(当前状态==结束状态) { ...

  2. 优先深度搜索判断曲线相交_程序员必知的十大基础实用算法之-DFS(深度优先搜索)...

    深度优先搜索 深度优先搜索是一种在开发爬虫早期使用较多的方法.它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件) .在一个HTML文件中,当一个超链被选择后,被链接的HTML文件 ...

  3. DFS(深度优先搜索)详解(概念讲解,图片辅助,例题解释,剪枝技巧)

    目录 那年深夏 引入 1.什么是深度优先搜索(DFS)? 2.什么是栈? 3.什么是递归? 图解过程 问题示例 1.全排列问题 2.迷宫问题 3.棋盘问题(N皇后) 4.加法分解 模板 剪枝 1.简介 ...

  4. 搜索与回溯算法:DFS(深度优先搜索)

    深度优先搜索:1.确定回溯终止条件2.重复生成其他可能 今天开始改用JavaScript 我的LeetCode题解: 力扣,剑指 Offer 12. 矩阵中的路径 力扣,剑指 Offer 13. 机器 ...

  5. 深度优先搜索c语言详解,深度优先搜索 — C语言版

    思路:找一个入口结点,然后搜索该结点的第一个相邻结点,再搜索该相邻结点的第一个相邻结点,依次往下寻找 - - ,直到所有结点都被遍历到,算法结束,退出. #include #define MAX 10 ...

  6. 类孔明棋 c语言实验,深度优先搜索中的重叠子结果的优化问题

    前几天帮朋友写一个类孔明棋的算法, 上题       5*5的棋盘   .表示没棋子 o表示有棋子 如:  ooooo ooooo oo.oo  ooooo ooooo 走法和孔明的走法一样 开始直接 ...

  7. C语言递归实现深度优先搜索DFS算法(附完整源码)

    C语言递归实现DFS算法 完整Graph.h 头文件 完整Graph.c 源文件文件 完整dfs_recursive.c 源文件(main测试函数) 完整Graph.h 头文件 #include &l ...

  8. DFS【深度优先搜索】的一个小小代码—破解QQ一笔画

    很久之前我在数学建模晚自习时,我后面的人问问能不能把一个一笔画红包解开,我看了一下他手机的屏幕,密密麻麻的线条,一看就是为难人类,但是我想了想,这貌似可以用DFS来解,于是我就开始写,然后就有了这个文 ...

  9. DFS(深度优先搜索)---迷宫(洛谷)----SCAU_LEO

    一.题目 题目链接:迷宫 首先,今天是1月2日,虽然有点晚了,但是还是祝大家新的一年快快乐乐,开开心心,题题AC,场场拿金,! 说说我对迷宫类题目的感受,我记得刚开始学迷宫的时候,不是看的很懂,但是睡 ...

最新文章

  1. python 删除list 里面的一个空集合
  2. 2016.01.04 论文改重
  3. portlet 与 servlet 的关系
  4. 第三次scrum冲刺
  5. ESP8266:(2)获取时间和天气
  6. SpringBoot 集成 Jsp、Thymeleaf 模板引擎 + Thymeleaf 基本使用
  7. 操作系统 第三章 内存管理
  8. 利用 HttpModule,基于输出,统一控制、干预、处理(例如: 过滤关键字、AntiXSS) ASP.Net WebForm Control 展现属性的方案原型...
  9. K8S学习--Kubeadm-3-dashboard部署和升级
  10. 百度地图,根据地址计算经度纬度
  11. win7安装VScode(Visual Studio Code)
  12. php 音频转换 WAV转MP3
  13. 买卖股票的最佳时机 II Java (贪心算法)
  14. plsql如何导入csv文件,PLSQL导入csv文件到数据库
  15. 淘宝心选在大润发开店了,背后意味着什么?
  16. DialogFragment以及AlertDialogFragment
  17. 为年会写的配乐诗朗诵稿
  18. CSDN日报190318:简单爬虫:给女友定时发送睡前小故事
  19. HackTheBox-baby CachedView
  20. 解决 Android resource linking failed, error: failed linking references.

热门文章

  1. python和excel的区别-对比Excel,轻松学习Python数据分析
  2. 基于C语言的学生选课系统
  3. 【php学习之路】微信公众帐号
  4. VMware vCenter Converter 物理机迁移
  5. Struts的vistor校验器
  6. 《地图气球》小程序从产品到运维的个人全栈开发过程分享(长文)
  7. 批量合并word文档
  8. Linux的vx开头的文件,微博 Qzone 微信 Linux文件及目录常用命令,进来瞅瞅
  9. 零基础是学习Java还是大数据?
  10. 商场抽奖软件 android,召唤抽奖系统