首页 > 编程知识 正文

深度优先搜索和回溯法,图的深度优先搜索算法

时间:2023-05-04 12:10:40 阅读:137909 作者:595

实际上,深度优先搜索是图形算法的一种,在英语中简称为DFS即Depth First Search。 其过程简单地说,就是对于每个可能的分支路径无法进一步深入,而且每个节点只能访问一次。

例如,下图是无向图。 从a点开始深度优先搜索时,A-B-E (下一个访问顺序不唯一,第二个点既可以是b,也可以是c,还可以是d。 (A-B-E )没有路! 追溯到a )-C-F-H-G-D (即使没有路,最终追溯到a,a也没有未访问的相邻节点,此次搜索结束)。

照片

简述深度优先搜索的特点,每个深度优先搜索的结果必然是图的一个联系成分。 深度优先搜索可以从多点开始。 如果按照深度优先搜索中"结束时间"对各节点进行排序,则得到被称为"拓扑排序"的内容

基本的想法

深度优先遍历图表的方法是从图中的某个顶点v出发:

(1)对顶点v的访问

)从v的未被访问的相邻点开始按深度优先遍历图; 访问图中与v路径相通的顶点;

)3)此时,图中顶点尚未被访问时,从未被访问的顶点开始,再次进行深度优先的遍历,直到图中的所有顶点都被访问。 当然,当人们刚掌握深度优先探索时,往往会用它来走迷宫。 实际上,我们有别的方法。 那是广度优先搜索(BFS )状态(state )。 状态是解题过程中每一步的情况。

运算符(operater )运算符是一种将问题从一种状态转换到另一种状态的方法的符号。 运算符可取的范围是检索的范围。 (一般设为局部变量)。

节点(node ) :用于表示状态的特征和相关信息。

全面列举

在我们面临的一些问题中,有一个问题是不能准确地找到数学模型。 也就是说,找不到直接求解的方法,要解决这种问题,一般用检索方法解决。 搜索是指探索问题的所有可能性。 按照一定的顺序、规则,继续探索,直到找到问题的答案为止。 如果试完还找不到解,那就是没有解。 刺探的时候,一定要摸清所有的情况。(

对于提问的最初状态,称为初始状态,被要求的状态称为目标状态。

所谓探索,就是将规则适用于实际状态,在其发生的状态中,进行到得到一个目标状态为止。

把产生新状态的过程称为扩张(从一个状态开始,应用规则,产生新状态的过程)

检索要点: (1)初始状态;

)2)重复新状态

)3)检查新状态是否为目标,是否结束,是否否转) 2;

如果搜索是用接近开始状态的程序依次扩展状态的,则称为宽度优先搜索。

如果扩展是扩展最初新产生的状态,则称为深度优先搜索。

深度优先搜索

深度优先搜索保存在1个数组中生成的所有状态。

(1)将初始状态放入数组,使其成为当前状态;

)2)扩展现在的状态,生成新的状态并放入排列,同时将新生成的状态作为现在的状态。

)3)判断当前状态是否与前一状态重复,如果重复,则返回前一状态,形成其他状态。

)4)判断当前状态是否为目标状态,如果是目标,则找到一个解并结束算法。

)5)如果数组为空,则没有解。

对于pascal语言,使用递归编写深度优先搜索程序相对简单,因为它支持递归,并且递归时可以自动实现回溯(利用局部变量)。 当然,还有非递归实现的算法。

搜索是人工智能中的基本方法之一是一种非常普遍使用的算法策略可以解决许多常见的问题在某些情况下,当很难考虑有效的解决方案时,搜索往往是选项的唯一选择。 标准地说,搜索算法是利用计算机的高性能,以一个问题的一部分或全部的可能性为目的,进行网罗,求出问题的解的一种方法。

虽然检索简单易懂,但掌握并编写高速高效优化的程序相当困难。 总之,检索算法灵活多样,一般框架很容易编写,但适当的优化必须根据实际情况确定。 在搜索算法中,深度优先搜索(也称为回溯法)是搜索算法中最简单最常见的,今天就从这里开始吧。 以下内容假设读者知道最基本的编程和简单的递归算法。

生成系统和搜索树

从其最终算法的实现来看,所有搜索算法可以分为控制结构和生成系统两部分。 如上所述,检索算法简单地说就是囊括所有可能的情况,找到合适的答案。 因此,最基本的问题是激昂的自行车会给出一切可能的情况,这实际上是一个生产性的系统。

我们把要解的问题分成几个阶段或步骤。 一个阶段被计算出来后,接下来往往有几个选择。 所有选项共同构成问题的解空间,对搜索算法来说,绘制所有阶段或步骤就像树的结构一样。

从根开始计算,直到找到某节点的解,回溯法[深度优先搜索]是最基本的搜索算法,它采用“下一只,走投无路,掉头”的思路,称为“回溯”

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。