关于DFS的理解
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的理解的更多相关文章
- 我对DFS的理解
		我对DFS的理解 [何为DFS] 深度优先搜索(Depth-First-Search),简称DFS.是一种常见搜索算法.其方法是从原点不断一条路扩散,当无路可走时回退来走下一条路,直至找到目标或遍历. ... 
- HDOJ1016 Prime Ring Problem(DFS深层理解)
		Prime Ring Problem 时间限制: 200 ... 
- dfs序理解-hdu3887
		dfs序就是相当于把树转化成了一个区间,在区间上进行操作. void dfs(int u, int fa) { l[u]=++key; ; i=e[i].next) { int v=e[i].v; i ... 
- poj3009 Curling 2.0(很好的题 DFS)
		https://vjudge.net/problem/POJ-3009 做完这道题,感觉自己对dfs的理解应该又深刻了. 1.一般来说最小步数都用bfs求,但是这题因为状态记录很麻烦,所以可以用dfs ... 
- 图的遍历 | 1131地铁图: dfs复杂模拟题
		这题在搞清楚思路绕过坑后,还是可以写的出通过sample data的代码的.但是不能AC,让我很气. 最后查清原因:还是对dfs本质理解的不够. wa代码: vis[s]=1; dfs(s,e,0); ... 
- nyoj20_吝啬的国度_DFS
		吝啬的国度 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市, ... 
- Hadoop基础教程之重新认识Hadoop
		之前,我们把hadoop从下载包部署到编写了helloworld,看到了结果.现是得开始稍微更深入地了解hadoop了. Hadoop包含了两大功能DFS和MapReduce, DFS可以理解为一 ... 
- Hadoop学习笔记(6) ——重新认识Hadoop
		Hadoop学习笔记(6) ——重新认识Hadoop 之前,我们把hadoop从下载包部署到编写了helloworld,看到了结果.现是得开始稍微更深入地了解hadoop了. Hadoop包含了两大功 ... 
- 单词的添加与查找 · Add and Search Word
		[抄题]: 设计一个包含下面两个操作的数据结构:addWord(word), search(word) addWord(word)会在数据结构中添加一个单词.而search(word)则支持普通的单词 ... 
随机推荐
- 【cf741】D. Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths(dsu on tree)
			传送门 题意: 给出一颗以\(1\)为根的有根树,树边带有一个字符(\(a\)~\(v\))的信息. 输出对于每个结点,其子树内最长的简单路径并且满足边上的字符能够组成回文串. 思路: 显然最终的答案 ... 
- 201871010116-祁英红《面向对象程序设计(java)》第二周学习总结
			博文正文开头格式:(3分) 项目 内容 <面向对象程序设计(java)> https://home.cnblogs.com/u/nwnu-daizh/ 这个作业的要求在哪里 https:/ ... 
- vlmcsd
			scp ./vlmcsd-x64-musl-static xxx@host.ip:/opt/kms/ chmod u+x /opt/kms/vlmcsd-x64-musl-static ./vlmcs ... 
- 201871010111-刘佳华《面向对象程序设计(java)》第十二周学习总结
			201871010111-刘佳华<面向对象程序设计(java)>第十二周学习总结 实验十 集合与GUI初步 实验时间 2019-11-14 第一部分:基础知识总结 第九章知识总结 1. ... 
- git pull --rebase的理解
			在使用git的过程中经常需要使用到git pull命令,在更新远端代码的同时如果与本地代码产生冲突了, 那么冲突的文件中就出现了需要手动合并的部分,而git pull --rebase不同的地方则是当 ... 
- 在net Core3.1上基于winform实现依赖注入实例
			目录 在net Core3.1上基于winform实现依赖注入实例 1.背景 2.依赖注入 2.1依赖注入是什么? 2.1依赖注入的目的 2.2依赖注入带来的好处 2.2.1生命周期的控制 2.2.2 ... 
- vue前端post请求之坑
			最近用的vue请求数据,坑死,还是对前端vue框架不熟. 与后端通信有问题,要么是json加入到url有问题.要么是json解析有问题. 解决方法: 1.请求参数一个用url传 var json=[{ ... 
- ADO.NET中的5个主要对象
			1.Connection:主要是开启程序和数据库之间的连接.没有利用连接对象将数据库打开,是无法从数据库中取得数据的. Close和Dispose的区别,Close以后还可以Open,Dispose以 ... 
- WEBAPI获取数据
			在大学学期期间学习的从mvc中的webapi中取数据 直接看代码 首先是控制器中的 using System; using System.Collections.Generic; using Syst ... 
- tkinter中的message
			from tkinter import * root =Tk() root.title("message练习") myText = "2019年12月13日,下午一个人, ... 
