DFS——深度优先搜索基础

转载 2015年11月21日 19:56:06

【0】README

0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 review DFS——深度优先搜索 的基础知识;


【1】深度优先搜索的应用

1.1)深度优先搜索算法描述(转自天勤计算机考研高分笔记——数据结构)

  • 1.1.1)图的深度优先搜索遍历(DFS)类似于二叉树的先序遍历。它的基本思想是(steps):
    • step1)首先访问出发点v, 并将其标记为已访问过;
    • step2) 然后选取与v 邻接的未被访问的任意一个顶点w , 并访问它;
    • step3)再选取与w 邻接的未被访问的任一顶点并访问它, 依次重复进行;
    • step4)当一个顶点所有的邻接顶点都被访问过时, 则依次退回到最近被访问过的顶点(这里就是一个递归访问的过程), 若该顶点还有其他邻接顶点未被访问, 则从这些未被访问的顶点中取一个重复上述的访问过程, 直至图中所有顶点都被访问过为止;

1.2)全局布尔型数值 Visited[] 初始化为false。 通过只对那些尚未被访问的节点递归调用该函数, 我们保证不会陷入无限循环。如果图是无向的且不连通的, 或是有向的但非强连通的,这种方法可能会访问不到某些节点。 此时,我们搜索一个未被标记的节点, 然后应用深入优先遍历, 并继续这个过程直到不存在未标记的节点为止。 因为该方法保证每一条边只访问一次, 所以只要使用邻接表, 则执行遍历的总时间就是 O(|E| + |V|);

相关文章推荐

首个重复字符

题目描述 对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符。 给定一个字符串(不一定全为字母)A及它的长度n。请返回第一个重复出现的字符。保证字符串中有重复字符,字符串的长度小于等于5...

深度优先搜索

深搜 (一):解释与理解 深度优先搜索是一种在开发爬虫早期使用较多的方法。它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件) 。在一个HTML文件中,当一个超链被选择后,...
  • pfl_327
  • pfl_327
  • 2017年08月10日 09:01
  • 117

DFS深度优先搜索(3)--hdu2181(哈密顿绕行世界问题)(基础题)

哈密顿绕行世界问题                                 Time Limit:1000MS    Memory Limit:32768KB    64bit IO F...

基础算法(四)---深度优先搜索(DFS)

深度优先搜索原理、步骤和Java实现

深度优先搜索DFS——图邻接表表示

作为图的一个基本算法,DFS应用很广,可以推广出很多实用的算法。下面贴出一个比较常用的用邻接表表示的图DFS。 /* 图邻接表表示DFS input: 1 7 A 1 5 B 2 4...
  • that163
  • that163
  • 2012年10月07日 12:26
  • 4042

深度优先搜索——DFS遍历

dfs算法

啊哈!算法—深度优先搜索DFS—解救小哈

小哈去玩迷宫,结果迷路了,小哼去救小哈。迷宫由n行m列的单元格组成(n和m都小于等于50),每个单元格要么是空地,要么是障碍物。 问题:帮小哼找到一条从迷宫的起点通往小哈所在位置的最短路径。(注意:障...
  • LY_624
  • LY_624
  • 2016年05月04日 16:37
  • 1130

深度优先搜索(DFS):POJ2718--Smallest Difference(解三)

poj2718是道典型的穷竭搜索题,解法很多,本文用最地道的dfs方法解答。

HDU1010 Tempter of the Bone(深度优先搜索DFS+奇偶性剪枝)

题目: Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav...

北大ACM1010-深度优先搜索(DFS)初探

抱歉最近太忙。。各种出差,难得静下心来研究下,上一篇说到暴力破解,这篇来说说DFS,DFS不明白意思的可以去百度之,简单来说就是从一个节点出发,一直探索与该节点连同的节点,直到走不通为止,然后回退到上...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DFS——深度优先搜索基础
举报原因:
原因补充:

(最多只允许输入30个字)