标签:
一、深度优先搜索
深度优先搜索算法(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