图的深度优先搜索

图的数据结构:

要表示一个图G(V,E)有两种常见的表示方法,邻接矩阵和邻接表。这两种方法可用于有向图和无向图。对于稀疏图,常用邻接表表示,
它占用的空间|E|要小于|V|*|V|。
邻接表:
图G(V,E)的邻接表表示由一个包含V列表的数组Adj组成,其中的每个列表对应于V中的一个顶点,对于v中的任意一个点u,邻接表Adj[u]
包含所有满足条件(u,v)属于E的点v,也就是Adj[u]中包含所有和u相邻的点。

邻接矩阵:
用一个矩阵表示,矩阵的横向和纵向分别为图中的点的有序排列,如果两个点之间有边相连对应的矩阵中的元素就是1,反之就是0.


         深度优先搜索,一句话总结,就是一直沿着当前路径搜索,直到没有路之后,重新回溯到一条新的路径上进行搜索。深度优先搜索属于图算法的一种,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。

        这种搜索策略比较盲目,算是一种穷举的策略,在数据复杂度较大时,很有花费大量的时间,甚至找不到解(面对NP问题只是理论上能找到解)。我们可以通过合理的剪枝来简化问题的难度,这样才有可能在大数据的情况下快速准确的找出一个解。

        同时,深度优先搜索配合一定的启发函数,能够避免盲目搜索,提高算法的效率。关于启发函数,我们应该对现有的问题进行抽象,构造合理的估值函数。

        另外,深度搜索还应该设立搜索的下界,避免陷入长时间无用解的搜索。

        关于回溯的思路,在回溯的时候应该直接回到上一个出口不唯一的父节点,回溯时要记住各种搜索状态的复位。

具体的算法描述可以看这个博客:

http://www.cnblogs.com/yanlingyin/archive/2011/12/26/Depth-firstsearch.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值