深度优先搜索

 

转载:https://www.cnblogs.com/skywang12345/p/3711483.html

 

深度优先搜索

 

1. 深度优先搜索介绍

图的深度优先搜索(Depth First Search),和树的先序遍历比较类似。

它的思想:假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通的顶点都被访问到。 若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。

显然,深度优先搜索是一个递归的过程。

 

 

2. 深度优先搜索图解

2.1 无向图的深度优先搜索

下面以"无向图"为例,来对深度优先搜索进行演示。

 

对上面的图G1进行深度优先遍历,从顶点A开始。

 

第1:访问A。

第2:访问(A的邻接点)C。

    在第1步访问A之后,接下来应该访问的是A的邻接点,即"C,D,F"中的一个。但在本文的实现中,顶点ABCDEFG是按照顺序存储,C在"D和F"的前面,因此,先访问C。

第3:访问(C的邻接点)B。

    在第2步访问C之后,接下来应该访问C的邻接点,即"B和D"中一个(A已经被访问过,就不算在内)。而由于B在D之前,先访问B。

第4:访问(C的邻接点)D。

    在第3步访问了C的邻接点B之后,B没有未被访问的邻接点;因此,返回到访问C的另一个邻接点D。

第5:访问(A的邻接点)F。

    前面已经访问了A,并且访问完了"A的邻接点B的所有邻接点(包括递归的邻接点在内)";因此,此时返回到访问A的另一个邻接点F。

第6:访问(F的邻接点)G。

第7:访问(G的邻接点)E。

 

因此访问顺序是:A -> C -> B -> D -> F -> G -> E

 

2.2 有向图的深度优先搜索

下面以"有向图"为例,来对深度优先搜索进行演示。

 

对上面的图G2进行深度优先遍历,从顶点A开始。

 

第1:访问A。

第2:访问B。

    在访问了A之后,接下来应该访问的是A的出边的另一个顶点,即顶点B。

第3:访问C。

    在访问了B之后,接下来应该访问的是B的出边的另一个顶点,即顶点C,E,F。在本文实现的图中,顶点ABCDEFG按照顺序存储,因此先访问C。

第4:访问E。

    接下来访问C的出边的另一个顶点,即顶点E。

第5:访问D。

    接下来访问E的出边的另一个顶点,即顶点B,D。顶点B已经被访问过,因此访问顶点D。

第6:访问F。

    接下应该回溯"访问A的出边的另一个顶点F"。

第7:访问G。

 

因此访问顺序是:A -> B -> C -> E -> D -> F -> G

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jvm类加载机制和类加载器_在JVM之下–类加载器

jvm类加载机制和类加载器在许多开发人员中,类加载器是Java语言的底层,并且经常被忽略。 在ZeroTurnaround上 ,我们的开发人员必须生活,呼吸,饮食,喝酒,并且几乎与类加载器保持亲密关系&#xff…

光源时间_您的国美备战时间已不足一个月!绝密国美考点、考场、光源分析送上!...

中国美术学院2020年本科招生考试报名公告,终于在前几天公布了!今年国美一共设置了三个考点,报名也已经正式开启啦!考点设置杭州考点:不设报考人数上限,接受全国所有省份考生报考(含广东省、河南省)深圳考点…

ltp-ddt eth_iperf_tcp iperf dualtest遇到的问题

ltp-ddt eth_iperf_tcp server端:iperf -s -i 5 -w 1M client端将ddt的核心代码抠出来: iperf -c 1921.68.40.41 -m -M 1500 -f M -d -t 60 -w 8K 手动运行三次后,server端挂了,client端报错:connect failed: Connecti…

beam search算法

转载 https://blog.csdn.net/xyz1584172808/article/details/89220906 https://blog.csdn.net/batuwuhanpei/article/details/64162331 https://www.zhihu.com/question/54356960 beam search算法 在看论文Sequence to Sequence Learning with neural networks时看到了beam …

微信支付遇到的坑--签名错误

遇到签名错误,因为微信没有给出具体错误信息,所以我们只能自己排查。 下面是我整理出可能导致签名错误的情况: 1.可以先去微信公众平台用支付接口调试工具验证签名方法是否有问题 https://pay.weixin.qq.com/wiki/tools/signverify/2.如果签名…

Apache Kafka / Spark流系统的性能调优

电信行业的实际案例研究 调试实际的分布式应用程序可能是一项艰巨的任务。 至少在一开始,最常见的Google搜索并没有什么用。 在这篇博客文章中,我将详细介绍如何将Apache Kafka / Spark Streaming / Apache Ignite应用程序加速近十倍,并将开…

mysql 8服务配置文件my.ini 不生效_2、mysql的启动选项和配置文件介绍

mysql服务端可以指定允许同时接入的客户端数量max-connections、客户端与服务器的通信方式、表的默认存储引擎default_storage_engine等等设置项,使得我们可以更加灵活地使用它。进入正题我们讲的是基于linux系统的,本文我们主要讲一下:1、有…

数学中常见的maxmin,min max

数学中常见的maxmin,min max 1、数学中公式(1)与公式(2)含义是不同的 (1) (2) 公式(1)的直接理解,先找出每个班里的身高最高的同学,再由这些同学中挑出身高最低的;同理,公式(2)的直接理解,先找出每个…

Mac入门--Apache/Php/Mysql的开启关闭

注意:mac自带apache环境和PHP环境 一 php服务的启动和关闭 php-fpm 启动 sudo php-fpm php-fpm 关闭 1 查看php-fpm端口是否在被php-fpm进程 netstat -an | grep 9000 查看进程pid sudo lsof -i:9000 杀死进程 sudo kill -9 [pid] 或者 sudo killall php-fpm 2 查看…

method=post 怎么让查看源代码看不到_网上文档无法复制怎么办?试试这几个方法!...

从网上复制资料很简单吗?平常在网上查找资料的时候,总是会有一些文档无法下载、甚至有时连复制都不行。这可怎么办?别急,今天我们就来介绍一些网页复制的方法,帮助大家更好地收集资料。一:复制到Word剪贴板…

python 加载mat文件

python 加载mat文件 直接上程序 import scipy.io as sciomat_path ./USPS_vs_MNIST.matload_mat scio.loadmat(mat_path) # load_mat为字典类型, <class dict> print(type(load_mat)) # 访问load_mat即为访问字典 X_src load_mat[X_src] # 这个X_src为numpy类型&…

[Sdoi2010] 地精部落

F. 地精部落 题目描述 传说很久以前&#xff0c;大地上居住着一种神秘的生物&#xff1a;地精。 地精喜欢住在连绵不绝的山脉中。具体地说&#xff0c;一座长度为 N 的山脉 H可分 为从左到右的 N 段&#xff0c;每段有一个独一无二的高度 Hi&#xff0c;其中Hi是1到N 之间的正 …

怎么判断冠词用a还是an_英文写作常见错误学习笔记 | 冠词

写在前面的话在知乎中看到“英文学术论文写作&#xff0c;有什么好书可以推荐”话题中有人推荐了香港大学出版社Steve Hart写的《English Exposed》一书&#xff0c;从副标题“Common Mistakes Made by Chinese Speakers”可以看出书是针对中国人常犯的错误而写的&#xff0c;作…

工厂模式 构建者模式_实践中的构建者模式

工厂模式 构建者模式我将不深入讨论该模式&#xff0c;因为已经有大量的文章和书籍对此进行了详细的解释。 相反&#xff0c;我将告诉您为什么以及何时应该考虑使用它。 但是&#xff0c;值得一提的是&#xff0c;这种模式与《 四人帮》一书中介绍的模式有些不同。 虽然原始模式…

python 反复访问迭代器iter,反复使用next

python 反复访问迭代器iter&#xff0c;反复使用next test [1, 2, 3]# 定义迭代器 iter_test iter(test)# 使用for循环访问迭代器 # 由于next()只向前走&#xff0c;所以当跌代到test最后一个值3之后&#xff0c;就会爆发异常StopIteration # 这里使用了一个try语句&#xf…

PPT转PDF方法

引用&#xff1a; using Microsoft.Office.Interop.PowerPoint;方法&#xff1a; ///<summary> /// PPT转PDF ///</summary> ///<param name"sourcePath">源文件路径</param> ///<param name"targetPath&qu…

打印容器_3D打印:增材点阵结构在压力容器优化设计中的应用

“增材制造是未来制造业的发展趋势&#xff0c;其优势显而易见&#xff0c;它可以实现传统加工工艺难以制造的设计&#xff0c;比如复杂薄壁结构、点阵结构、一体化结构等。其中&#xff0c;点阵结构作为一种新型的轻量化结构&#xff0c;具有良好的比刚度、比强度等力学性能。…

Java平台模块系统公众审查未能通过

在过去的几周里&#xff0c;Java世界中的戏剧&#xff0c;阴谋和政治活动异常高涨&#xff0c;最终在本周的JSR 376 Java平台模块系统公共评审投票中达到了顶峰。 Java模块化&#xff08;包括Java平台模块系统&#xff08;JPMS&#xff09;&#xff09;可以说是JDK 9最重要的部…

区间素数个数查询

给出一个闭区间的两端l和r&#xff0c;输出[l,r]中素数的个数。 输入格式: 两个整数l和r&#xff0c;之间用空格隔开&#xff08;1<l<r<10000&#xff09;。 输出格式: 输出一个结果。 输入样例: 2 10输出样例: 4 import java.util.Scanner;public class Main {static…

jtabel 遍历_使用抽象表模型获取JTable中选定的行

在下面的示例中&#xff0c;TableModel更新Set checked在执行setValueAt()..相邻模型JList侦听表的模型并显示当前选定的行号。该示例假定所选行数与行数相比较小。注意使用TreeSet&#xff0c;其迭代器保留了元素的自然顺序。import java.awt.Dimension;import java.awt.Event…