ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

DFS:入门

2022-09-06 18:31:47  阅读:165  来源: 互联网

标签:... return 入门 传送门 DFS 搜索 例题 节点


基本概念

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

然而,不会有人看这个就可以学会的,所以这个玩意看看就好


通俗来讲,这个算法叫深度优先搜索,而搜索也可以理解为遍历,或者是全部找一遍。

可以百度的搜索一下,当你输入信息时,他会找到与你所输入的信息相匹配的所有东西,其中的原理就可以理解为(实际当然不是)就是他把互联网上的信息全部找了一遍,然后再输出了你想要的信息。这也就是搜索的概念。

而深度优先搜索(就是在搜索前面加上了深度优先)就是一种搜索的方式,使用它可以使我们的搜索更加清楚,逻辑更加清晰。

前置知识

由于深搜建立在一颗搜索树上,所以默认需要学会树和图(学不会的走人)如果对图和树没有一个很好的理解的话,建议看看这个:树 传送门
图传送门
建议是看看定义就好,不需要过多深入。

正片

好,现在假装你学会树和图了,我们来看看深搜到底是什么算法:
5TwOS.png
5TGK5.png
5TF9i.png
5T0Gn.png
5TuLh.png
5T4Us.png
5T6Z0.png
5T3so.png
5ThTp.png
5TBqF.png
5TO7g.png
我才不是抄的


主要意思大家应该已经明白了,就是一条路走到黑,不撞南墙不回头,只要能往下走就一直往下走,直到走到不能走或者满足条件为止。那么这个是通俗的语言,用伪代码来写就是:

dfs(...) //含义:(!!)准备 对当面步 做决定 
{
	if(ok==1)
	return;
	if(该决定不符合条件)  //  11
		return;
	
	if(到终点)
	{
		ok=1;
		...
		return;
	 } 
	... 
	  do   //有时  当前步只有一个决定 
	  {
		(1)对当前步 做第一个决定;
			进行数据处理 !! 
	  		for(int i=1;i<=...;i++)
	  		{
	  			dfs(next);  //直接进行下一个决定,下一个决定是否正确在11处判断,不在该处判断,否则可能如果输入只做一个决定就结束了,不会判断到第一步的错误
		 	}
	  		还原,以便做其他决定; !!!   注意不是dfs(next)的还原!!
	  	(2)对当前步 做第二个决定;
	    	 进行数据处理 	  	
	  		 for(int i=1;i<=...;i++)
	  		 {
	  			dfs(next);
			 }
	  		还原,以便做其他决定; 
	  }
}

这样就差不多结束了,我们再看一个经典的例题(建议分屏食用):例题传送门

题解(实在想不出来再看)


完结+练习

可以去找找这几个题目练练手:

P1219(就是例题)P3958P1135POJ1321(难度递增……吧?)

还有一个英文题面的题目:

POJ3279

完结,撒花!!!

标签:...,return,入门,传送门,DFS,搜索,例题,节点
来源: https://www.cnblogs.com/wcyares/p/16662883.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有