博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DFS与BFS对比
阅读量:7041 次
发布时间:2019-06-28

本文共 1131 字,大约阅读时间需要 3 分钟。

前面已经说过了深搜和广搜了,是不是有点还不是很好的分清他们?(其实分不分的请都没大有关系)

下面我们来看一看广搜与深搜的区别吧。

算法步骤上的区别

深度优先遍历图算法步骤:

1.访问顶点v

2,。依次从v未被访问过的邻接顶点出发,对图进行搜索(深度优先搜索)直至图中的和v相通的顶点都被访问过;

3.若此时图中尚有顶点未被访问过,则从一个未访问的顶点出发,从新进行深度优先搜索,直到图中的所有顶点均被访问过为止。

上述过程可能比较抽象,举个实例来看看这个算法

DFS 在访问图中某一起始顶点 v 后,由 v 出发,访问它的任一邻接顶点 w1;再从 w1 出发,访问与 w1邻 接但还没有访问过的顶点 w2;然后再从 w2 出发,进行类似的访问,… 如此进行下去,直至到达所有的邻接顶点都被访问过的顶点 u 为止。

接着,退回一步,退到前一次刚访问过的顶点,看是否还有其它没有被访问的邻接顶点。如果有,则访问此顶点,之后再从此顶点出发,进行与前述类似的访问;如果没有,就再退回一步进行搜索。重复上述过程,直到连通图中所有顶点都被访问过为止

广度优先遍历图算法步骤: 

1.现将根节点放入队列中

2。从队列中取出第一个元素(取出:将其从队列中删除)

   判断该点是否为所搜索的目标节点,若是,结束搜索并传回结果。 否则将他所尚未搜索到的直接子节点加入队列中。

3.若队列为空,表明整张图都搜过了——即图中没有要搜索的目标节点。结束搜索并传回“找不到目标”

4.下面展示步骤2的图示

 

 两者必须遵守的规则

深度优先搜索:

下面图中的数字显示了深度优先搜索顶点被访问的顺序。
为了实现深度优先搜索,首先选择一个起始顶点并需要遵守三个规则:
(1) 如果可能,访问一个邻接的未访问顶点,标记它,并把它放入栈中。
(2) 当不能执行规则1时,如果栈不空,就从栈中弹出一个顶点。
(3) 如果不能执行规则1和规则2,就完成了整个搜索过程。
广度优先搜索:
在深度优先搜索中,算法表现得好像要尽快地远离起始点似的。相反,在广度优先搜索中,算法好像要尽可能地靠近起始点。它首先访问起始顶点的所有邻接点,然后再访问较远的区域。它是用队列来实现的。
下面图中的数字显示了广度优先搜索顶点被访问的顺序。
实现广度优先搜索,也要遵守三个规则:
(1) 访问下一个未来访问的邻接点,这个顶点必须是当前顶点的邻接点,标记它,并把它插入到队列中。
(2) 如果因为已经没有未访问顶点而不能执行规则1时,那么从队列头取一个顶点,并使其成为当前顶点。
(3) 如果因为队列为空而不能执行规则2,则搜索结束。

转载于:https://www.cnblogs.com/z360/p/6936190.html

你可能感兴趣的文章
【Postfix】利用postal进行Postfix的压力测试
查看>>
ubuntu12.04本地搭建ubuntu更新源
查看>>
如何让wp7真机调试时候保持屏幕高亮不锁屏
查看>>
试论SAN环境对存储设备的应用
查看>>
修改Firefox的缓存位置
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
FusionChart使用4
查看>>
泥瓦匠之 Java 的成长感悟
查看>>
sendfile机制学习(转)
查看>>
MySQL主从的一致性校验及修复
查看>>
Win8安装截图
查看>>
elasticsearch best_fields most_fields cross_fields从内在实现看区别——本质就是前两者是以field为中心,后者是词条为中心...
查看>>
php 解析时间字符串
查看>>
我的微博
查看>>
Mysql用户、权限管理
查看>>
4.C#.Net重写 TryParse方法
查看>>
Linux常用命令
查看>>
Android Intent Action 大全
查看>>
HTML5小游戏--CoreBall
查看>>