数据结构 讲课
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图的两种遍历算法
深度优先搜索遍历(DFS) 广度优先搜索遍历(BFS)
02 深度优先搜索遍历
--它的基本算法是什么?
02
深度优先搜索遍历
它的基本算法是什么?
深度优先搜索遍历(Depth First Search)
基本算法
从顶点1出发深度搜索遍历图G 的dfs描述如下: (1)访问顶点1 (2)依次从1的未被访问过的临 接点出发深度遍历
02
深度优先搜索遍历
它的基本算法是什么?
深度优先搜索遍历(Depth First Search)——递归算法
递归算法思想:
1. 首先从图G=(V,E)中某一顶点v0出发,访问任意一个和v0邻接的定点w1, 2. 再从w1出发,再访问w1出发,再访问和w1邻接且未被访问过的任意顶点w2 3. 然后,从w2出发进行如上访问。 4. 重复这个过程,直到某一个顶点的所有邻接点都被访问过时,回退到尚有邻接点未
如:Prim最小生成树算法 Dijkstra最小生成树算法
都用了类似广度优先搜索的思想
04 课后总结及练习
04 课后总结及练习
对于下面一个图及其存储结构,写出以v2、v8为起始点的深度 优先遍历序列。
04 课后总结及练习
对于下面一个图及其存储结构,写出以v2、v8为起始点的深度 优先遍历序列。
03 广度优先算法遍历
--它的基本算法是什么?
03
广度优先搜索遍历
它的基本算法是什么?
广度优先搜索遍历(Breadth First Search)
基本算法
从一个顶点V0开始,辐射状地优先 遍历其周围较广的区域,故得名。
典型的层次遍历
03
广度优先搜索遍历
它的基本算法是什么?
广度优先搜索遍历(Breadth First Search)——算法
数据结构
§7.3 图的遍历
主讲人:刘碧芸
目录
CONTENT
01 图的遍历 什么是图的遍历?
02 深度优先搜索遍历 它的基本算法是什么?
03 广度优先搜索遍历 它的基本算法是什么?
04 课后总结及练习
01 图的遍历
--什么是图的遍历?
01
图的遍历
--什么是图的遍历?
图的遍历——访问图中所有顶点一次且仅一次
非递归
栈
1
2
4
5
5的邻接表空,
4
回退8出栈
2 8
1
02
深度优先搜索遍历
它的基本算法是什么?
非递归
栈
1 8
2
4
5
6
4
2 8
1
02
深度优先搜索遍历
它的基本算法是什么?
非递归
3
栈
6
1
3
8
2
4
5
6
7
4
2 8
1
02
深度优先搜索遍历
它的基本算法是什么?
非递归
栈
1 3
2
4
5
6
7
8 7的邻接表空,逐 一退栈
02
1
03
广度优先搜索遍历
它的基本算法是什么?
宽度
队
1
2
3
3
2
03
广度优先搜索遍历
它的基本算法是什么?
宽度
队
1
2
3
5
4
4
5
3
03
广度优先搜索遍历
它的基本算法是什么?
宽度
队
1
7
2
3
6
5
4
5
6
7
4
03
广度优先搜索遍历
它的基本算法是什么?
宽度
队
1
2
3
7
6
4
5
6
7
5
8
03
广度优先搜索遍历
它的基本算法是什么?
思想:
1. 设一先进先出的队Q,从结点出发,访问v结点。 2. 再访问v的所有邻接点,并将所有邻接点入队,队头元素出队,设
为a。 3. 接着访问a的所有邻接点,并将a的所有邻接点入队。 4. 队头元素出队,重复上述过程,直到队空。 5. 图示过程如下:
03
广度优先搜索遍历
它的基本算法是什么?
宽度
队
答案: 以v2为起始点:v2-v1-v3-v6-v7-v4-v8-v5 以v8为起始点:v8-v4-v2-v1-v3-v6-v7-v5
行是知之始, 知是行之成。
谢谢欣赏!
深度优先搜索遍历
它的基本算法是什么?
深度优先搜索遍历(Depth First Search)——问题
问题:
1. 如何设计算法以判断给定的无向图是否是连通的? 2. 如何设计算法以判断给定的无向图中的边数? 3. 设计算法以判断给定的无向图是树。 4. 设计算法以判断给定的有向图是以v0为根的有向树。 5. 设计算法以判断图中的一个节点是否为关节点。
被访问过的定点。 5. 再从该顶点出发,重复上述过程,直到所有顶点都被访问过为止。
02
深度优先搜索遍历
它的基本算法是什么?
02
深度优先搜索遍历
它的基本算法是什么?
下面讨论dfs算法的设计
开始
访问v0,置标志
求v0邻接点
有邻接点w
N
W访问过
结束 Y
w
v0
求下一邻接点
02
深度优先搜索遍历
它的基本算法是什么?
深度优先搜索遍历(Depth First Search)——递归算法
非递归算法思想:
1. 由访问vi的邻接表转到访问vj的邻接表时,vi进栈。
2. 从栈中依次弹出结点v0,访问v0的单链表中未被访问过的结点,在 访问过程中并重复上述的入栈过程。
3. 过程如下页图示:
02
深度优先搜索遍历
它的基本算法是什么?
宽度
队
1
2
3
7
4
5
6
7
6
8
03
广度优先搜索遍历
它的基本算法是什么?
宽度
队
1
2
3
4
5
6
7
7
8
03
广度优先搜索遍历
它的基本算法是什么?
宽度
队
1
2
3
4
5
6
7
8
03
广度优先搜索遍历
它的基本算法是什么?
广度优先搜索遍历(Breadth First Search)——应用
广度优先搜索是最简单的图搜索算法之一,也是许多重要的图 算法的原型。
非递归
栈
1
02
深度优先搜索遍历
它的基本算法是什么?
非递归
栈
1 2
1
02
深度优先搜索遍历
它的基本算法是什么?
非递归
栈
1 2 4
2 1
02
深度优先搜索遍历
它的基本算法是什么?
非递归
栈
1
பைடு நூலகம்
2
4
4
2 8
1
02
深度优先搜索遍历
它的基本算法是什么?
非递归
栈
1 8
2
4
5
4
2 8
1
02
深度优先搜索遍历
它的基本算法是什么?