DFS(深度优先搜索)相当于暴力寻找有效解的过程

如果把多种情况写成一个树的方式

那么DFS的实质就是遍历所有分枝来寻找最优解

而DFS中遍历所有解的方式采用了我们称之为回溯法的东西

如图所示

图中的搜索顺序为从A到B到D

然后在向回退一步

此时原来D的地方因为被访问过

所以不选择访问之

选择访问E,之后访问G

因为E和G被访问过

所以我们需要往回走到A

此时向C开始访问

具体过程很好理解

做题时只需要每一次判断下是否满足条件即可

下面上@Armin 给我们写的关于DFS相当好的模板

想看@Armin 博客的同学请点击左边的友链哦

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

 void dfs(int )
{
if(到达终点状态)
{
...//根据题意添加
return;
} for(所有方式)
{
if(扩展方式所达到状态合法)
{
修改操作;//根据题意来添加
标记;//访问过这个元素
dfs();
还原标记;
//是否还原标记根据题意
//如果加上就是回溯法
}
}
}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

关于回溯法的话主要还是根据题意

如果题意仅仅要求判断是否有解的话

就没有必要再去回溯了

浪费时间

Notes:其实因为DFS是一个递归的过程

其实还真的不是那么好懂

博主整整看了两天才差不多理解

有疑问的欢迎在评论区留言

01:27:21  2018-11-20  Author:LanceYu

关于DFS的理解的更多相关文章

  1. 我对DFS的理解

    我对DFS的理解 [何为DFS] 深度优先搜索(Depth-First-Search),简称DFS.是一种常见搜索算法.其方法是从原点不断一条路扩散,当无路可走时回退来走下一条路,直至找到目标或遍历. ...

  2. HDOJ1016 Prime Ring Problem(DFS深层理解)

      Prime Ring Problem                                                                       时间限制: 200 ...

  3. dfs序理解-hdu3887

    dfs序就是相当于把树转化成了一个区间,在区间上进行操作. void dfs(int u, int fa) { l[u]=++key; ; i=e[i].next) { int v=e[i].v; i ...

  4. poj3009 Curling 2.0(很好的题 DFS)

    https://vjudge.net/problem/POJ-3009 做完这道题,感觉自己对dfs的理解应该又深刻了. 1.一般来说最小步数都用bfs求,但是这题因为状态记录很麻烦,所以可以用dfs ...

  5. 图的遍历 | 1131地铁图: dfs复杂模拟题

    这题在搞清楚思路绕过坑后,还是可以写的出通过sample data的代码的.但是不能AC,让我很气. 最后查清原因:还是对dfs本质理解的不够. wa代码: vis[s]=1; dfs(s,e,0); ...

  6. nyoj20_吝啬的国度_DFS

    吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市, ...

  7. Hadoop基础教程之重新认识Hadoop

      之前,我们把hadoop从下载包部署到编写了helloworld,看到了结果.现是得开始稍微更深入地了解hadoop了. Hadoop包含了两大功能DFS和MapReduce, DFS可以理解为一 ...

  8. Hadoop学习笔记(6) ——重新认识Hadoop

    Hadoop学习笔记(6) ——重新认识Hadoop 之前,我们把hadoop从下载包部署到编写了helloworld,看到了结果.现是得开始稍微更深入地了解hadoop了. Hadoop包含了两大功 ...

  9. 单词的添加与查找 · Add and Search Word

    [抄题]: 设计一个包含下面两个操作的数据结构:addWord(word), search(word) addWord(word)会在数据结构中添加一个单词.而search(word)则支持普通的单词 ...

随机推荐

  1. 201871010116-祁英红《面向对象程序设计(java)》第二周学习总结

    博文正文开头格式:(3分) 项目 内容 <面向对象程序设计(java)> https://home.cnblogs.com/u/nwnu-daizh/ 这个作业的要求在哪里 https:/ ...

  2. appium--使用PyYAML封装Capability

    前戏 YAML 语言的设计目标,就是方便人类读写.它实质上是一种通用的数据串行化格式. 它的基本语法规则如下. YAML大小写敏感: 使用缩进代表层级关系: 缩进只能使用空格,不能使用TAB,不要求空 ...

  3. Mybatis主配置文件配置url报错:Cause: org.xml.sax.SAXParseException; lineNumber: 15; columnNumber: 100; 对实体 "useSSL" 的引用必须以 ';' 分隔符结尾。

    <property name="url" value="jdbc:mysql://localhost:3306/shop?characterEncoding=UTF ...

  4. csps2019记

    Day0: 上午疯狂颓板子(树状数组,KMP)屁都没考,感觉海星. 上午坐大巴去了德州,中午和skyh凑钱吃饭(其实是我请他)rp++. 下午在火车上和侯神打扑克,拉火车之神Get. 到燕大试机,敲了 ...

  5. 改善java程序的151个建议

    <编写高质量代码-改善java程序的151个建议> --秦小波 第一章.开发中通用的方法和准则 1.不要在常量和变量中出现易混淆的字母 long a=0l; --> long a=0 ...

  6. Beyond Compare的自定义破解方法

    因本人是程序员的缘故,经常时不时就是几千几万行代码找不同,也就时常要用到一个超级无敌好用的文本对比软件:Beyond Compare. 然而破解成了一大问题,网上有很多注册码都已经被封了或者是注销掉了 ...

  7. app版本升级的测试点

    移动端版本更新升级是一个比较重要的功能点,主要分为强制更新和非强制更新. 1.强制更新需要测试的点有: 1)强制升级是否可以升级成功 从老版本的包升级到新版版的包是否可以升级成功. 2)升级后的数据是 ...

  8. RMI初体验--第一次错处理java.rmi.UnmarshalException&ClassNotFoundException

    今天参考了一下网上Rhello示例,搞了一下RMI测试. server端是 java8 client 段是java6 然后 运行报错: java.rmi.UnmarshalException: err ...

  9. 【UOJ#48】【UR #3】核聚变反应强度(质因数分解)

    [UOJ#48][UR #3]核聚变反应强度(质因数分解) 题面 UOJ 题解 答案一定是\(gcd\)除掉\(gcd\)的最小质因子. 而\(gcd\)的最小值因子一定是\(a_1\)的质因子. 所 ...

  10. VS2019打开旧项目导致引用失效的解决方案

    用VS2019打开VS2015创建的MVC项目时所有引用全部失效: 解决方案: 打开项目的csproj文件,删除 Target节点,在重新打开项目. <Target Name="Ens ...