深搜(深度优先搜索)

深度优先搜索属于图算法的一种,英文缩写为DFS,其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。

一、从枚举到深搜

在我们遇到的一些问题当中,有些问题我们不能够确切的找出数学模型,即找不出一种直接求解的方法,解决这一类问题,我们一般采用搜索的方法解决。搜索就是用问题的所有可能去试探,按照一定的顺序、规则,不断去试探,直到找到问题的解,试完了也没有找到解,那就是无解,试探时一定要试探完所有的情况(实际上就是枚举);
对于问题的第一个状态,叫初始状态,要求的状态叫目标状态。搜索就是把规则应用于初始状态,在其产生的状态中,直到得到一个目标状态为止。产生新的状态的过程叫扩展(由一个状态,应用规则,产生新状态的过程)

搜索的要点
(1)初始状态;
(2)重复产生新状态;
(3)检查新状态是否为目标,是–结束,否–转(2);
如果搜索是以接近起始状态的程序依次扩展状态的,叫宽度优先搜索
如果扩展是首先扩展新产生的状态,则叫深度优先搜索

深度优先搜索用一个数组存放产生的所有状态。
(1) 把初始状态放入数组中,设为当前状态;
(2) 扩展当前的状态,产生一个新的状态放入数组中,同时把新产生的状态设为当前状态;
(3) 判断当前状态是否和前面的重复,如果重复则回到上一个状态,产生它的另一状态;
(4) 判断当前状态是否为目标状态,如果是目标,则找到一个解答,结束算法。
(5) 如果数组为空,说明无解。

二、基本思路

深度优先遍历图的方法是,从图中某顶点v出发:
(1)访问顶点v;
(2)依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;
(3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。

三、举例说明

下图是一个无向图,如果我们从A点发起深度优先搜索(以下的访问次序并不是唯一的,第二个点既可以是B也可以是C,D),则我们可能得到如下的一个访问过程:A–B--E(没有路了!回溯到A) C–F--H–G--D(没有路,最终回溯到A,A也没有未访问的相邻节点,本次搜索结束)。简要说明深度优先搜索的特点:每次深度优先搜索的结果必然是图的一个连通分量.深度优先搜索可以从多点发起。
深搜(深度优先搜索DFS)
四、算法

深搜(深度优先搜索DFS)

相关文章:

  • 2022-02-12
  • 2022-12-23
  • 2022-12-23
  • 2021-05-26
猜你喜欢
  • 2022-12-23
  • 2021-07-25
  • 2021-10-22
  • 2021-09-19
  • 2022-01-18
相关资源
相似解决方案