码迷,mamicode.com
首页 > 编程语言 > 详细

深度优先搜索算法

时间:2016-06-13 13:39:07      阅读:389      评论:0      收藏:0      [点我收藏+]

标签:

 

一、深度优先搜索

深度优先搜索算法(Depth First Search),是图论中的经典算法。
深度优先搜索算法是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当结点所有子结点那一层都被搜索过,再回溯返回到当前结点的邻结点,继续搜索,直到遍历完整棵树。一般采用的是前序遍历,先根然后再左右结点的方式进行。

任何DFS只需要通过下面几步就可以实现,无论是递归还是非递归方式。我给这几步分别做了一个命名,分别是find、forward、done、back。
如下:
1、find(right):在树的当前层,横向遍历,尝试找到ok的节点。(这一步通常被叫做剪枝,只留下ok的。)
2、forward(down):若在当前层找到ok的结点,并且当前层不是最后一层:把ok的节点放到当前层;进入下一层第一个结点。跳到find
3、done(right):若在当前层找到ok的结点,并且当前层是最后一层:打印出结果;进入当前层的下一个结点。跳到find
4、back(up):在当前层没有找到ok的节点:返回上一层当前结点的下一个兄弟节点。跳到find 其实最重要的是find。然后后面的forward、done、back只是用来控制搜索走向。这四步可以进一步总结成两步。

二、演示深度优先搜索的过程

技术分享

假设按照以下的顺序来搜索:

1.V0->V1->V4,此时到底尽头,仍然到不了V6,于是原路返回到V1去搜索其他路径;

2.返回到V1后既搜索V2,于是搜索路径是V0->V1->V2->V6,,找到目标节点,返回有解。

这样搜索只是2步就到达了

 

3.深度优先搜索

给出下面所示的图,求图中的V0出发,是否存在一条路径长度为4的搜索路径。

技术分享

一个解为:V0->V3->V5->V6

4、处理过程

技术分享

技术分享

技术分享

 

 

深度优先搜索算法

标签:

原文地址:http://www.cnblogs.com/-210843013/p/5580098.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!