当前位置:网站首页>图的遍历之深度优先搜索和广度优先搜索
图的遍历之深度优先搜索和广度优先搜索
2022-07-01 23:01:00 【生活需要深度】
本章会先对图的深度优先搜索和广度优先搜索进行介绍,然后再给出C/C++/Java的实现。
目录
1. 深度优先搜索的图文介绍
1.1 深度优先搜索介绍
1.2 深度优先搜索图解
2. 广度优先搜索的图文介绍
2.1 广度优先搜索介绍
2.2 广度优先搜索图解
3. 搜索算法的源码转载请注明出处:如果天空不死 - 博客园
更多内容:数据结构与算法系列 目录
深度优先搜索的图文介绍
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
广度优先搜索的图文介绍
1. 广度优先搜索介绍
广度优先搜索算法(Breadth First Search),又称为"宽度优先搜索"或"横向优先搜索",简称BFS。
它的思想是:从图中某顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使得“先被访问的顶点的邻接点先于后被访问的顶点的邻接点被访问,直至图中所有已被访问的顶点的邻接点都被访问到。如果此时图中尚有顶点未被访问,则需要另选一个未曾被访问过的顶点作为新的起始点,重复上述过程,直至图中所有顶点都被访问到为止。
换句话说,广度优先搜索遍历图的过程是以v为起点,由近至远,依次访问和v有路径相通且路径长度为1,2...的顶点。
2. 广度优先搜索图解
2.1 无向图的广度优先搜索
下面以"无向图"为例,来对广度优先搜索进行演示。还是以上面的图G1为例进行说明。
第1步:访问A。
第2步:依次访问C,D,F。
在访问了A之后,接下来访问A的邻接点。前面已经说过,在本文实现中,顶点ABCDEFG按照顺序存储的,C在"D和F"的前面,因此,先访问C。再访问完C之后,再依次访问D,F。
第3步:依次访问B,G。
在第2步访问完C,D,F之后,再依次访问它们的邻接点。首先访问C的邻接点B,再访问F的邻接点G。
第4步:访问E。
在第3步访问完B,G之后,再依次访问它们的邻接点。只有G有邻接点E,因此访问G的邻接点E。
因此访问顺序是:A -> C -> D -> F -> B -> G -> E
2.2 有向图的广度优先搜索
下面以"有向图"为例,来对广度优先搜索进行演示。还是以上面的图G2为例进行说明。
第1步:访问A。
第2步:访问B。
第3步:依次访问C,E,F。
在访问了B之后,接下来访问B的出边的另一个顶点,即C,E,F。前面已经说过,在本文实现中,顶点ABCDEFG按照顺序存储的,因此会先访问C,再依次访问E,F。
第4步:依次访问D,G。
在访问完C,E,F之后,再依次访问它们的出边的另一个顶点。还是按照C,E,F的顺序访问,C的已经全部访问过了,那么就只剩下E,F;先访问E的邻接点D,再访问F的邻接点G。
因此访问顺序是:A -> B -> C -> E -> F -> D -> G
搜索算法的源码
这里分别给出"邻接矩阵无向图"、"邻接表无向图"、"邻接矩阵有向图"、"邻接表有向图"的C/C++/Java搜索算法源码。这里就不再对源码进行说明,please RTFSC;参考源码中的注释进行了解。
边栏推荐
- from pip._internal.cli.main import main ModuleNotFoundError: No module named ‘pip‘
- flutter Unable to load asset: assets/images/888. png
- Commemorate becoming the first dayus200 tripartite demo contributor
- Huisheng Huiying 2022 intelligent, fast and simple video editing software
- 2022安全员-C证考试题模拟考试题库及模拟考试
- 2021 RoboCom 世界机器人开发者大赛-高职组初赛
- 2022 examination questions and online simulation examination for safety management personnel of hazardous chemical business units
- 2022 R1 fast opening pressure vessel operation test questions and answers
- Jielizhi, production line assembly link [chapter]
- Know --matplotlib
猜你喜欢

“35岁,公司老总,月薪2万送外卖“:时代抛弃你,连声再见都没有

Wechat personal small store one click opening assistant applet development

什么是马赛克?
![Jielizhi Bluetooth headset quality control and production skills [chapter]](/img/ad/28e7461f8c5dc5c54a3f4da0c111ac.png)
Jielizhi Bluetooth headset quality control and production skills [chapter]

【小程序】通过scroll-view组件实现左右【滑动】列表

Commemorate becoming the first dayus200 tripartite demo contributor

ARP报文头部格式和请求流程

CADD course learning (3) -- target drug interaction

Yoga27 multidimensional all-in-one computer with excellent appearance and high-end configuration

CKS CKA ckad change terminal to remote desktop
随机推荐
SWT / anr problem - SWT causes kernel fuse deadlock
上海炒股开户选择手机办理安全吗?
The online beggar function of Japanese shopping websites
2022 R1 fast opening pressure vessel operation test questions and answers
Matplotlib common settings
2021 RoboCom 世界机器人开发者大赛-本科组初赛
Commemorate becoming the first dayus200 tripartite demo contributor
Leetcode (34) -- find the first and last positions of elements in a sorted array
认识--Matplotlib
Matplotlib常用设置
2022年R1快开门式压力容器操作考题及答案
物联网现状及未来发展趋势
Oracle中已定义者身份执行函数AUTHID DEFINER与Postgresql行为的异同
物联网技术应用属于什么专业分类
[applet] realize the left and right [sliding] list through the scroll view component
Win 10 mstsc connect RemoteApp
Typescript enumeration
typescript枚举
Huisheng Huiying 2022 intelligent, fast and simple video editing software
日本购物网站的网络乞丐功能