第七章--图的深度优先遍历
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》 课程
图的遍历
主讲教师:李晓娜
目录 CONTENTS
1 图的遍历的定义 2 深度优先遍历的基本思想 3 深度优先遍历的实现过程
1 图的遍历的定义
图的遍历
从图的任意指定顶点出发,依照某种规则去访问图中所有顶 点,且每个
顶点仅被访问一次,这一过程叫做图的遍历。 遍历实质:找每个顶点的邻接点的过程。
深度优先遍历
广度优先遍历
2 DFS基本思想
深度优先遍历
深度优先遍历(Depth_First Search,DFS)是指按照深度方向搜索 ,它
类似于树的先根遍历。 (1) 从图中某个顶点Vi出发,首先访问Vi。 (2) 选择一个与刚访问过的顶点Vi相邻接且未访问过的顶点Vj,并访问该顶点。以该 顶点为新顶点,重复步骤(2),直到当前顶点的邻接顶点都已被访问为止。 (3) 返回前一个访问过的且仍有未访问的邻接点的顶点,找出并访问该顶点的下一 个未被访问的邻接点,然后重复步骤(2)。
2 DFS基本思想
例:深度优先遍历
v0
v1
v2
v3
v6 v7 v8
VV00
V11
V66
VV22
V33 VV77 VV88
v4 v5 (a)
VV44 VV55
由此,得到顶点访问序列为:
v0->v1->v2->v3->v4->v5->v6->v7->v8
思考:还能生成其他序列吗?
如何判别顶点V的邻接点是否被访问?
DFS 结果 v2→v1→v3→v5→v4→v6
谢谢学习
主讲教师:李晓娜
1 图的遍历的定义
图的特殊性
图没有“自然”的首结点
• 图的任意一个顶点都可作为第一个被访问的首结点
非连通图中,从一个顶点出发,只能够访问它所在的连通分量上的所有顶点
• 需考虑如何选取下一个出发点以访问其余连通分量
图中若有回路存在,则一个顶点被访问之后,有可能沿回路又回到该顶点
• 区分已访问顶点、未访问顶点 搜索路径
2 DFS基本思想
解决办法:为每个顶点设立一个“访问标志”位。可设置
一个辅助数组 visited [n],用来标记每个被访问过的顶点。
初始状态,将图中每个顶点的访问标志设为 0,之后搜索图中每个顶
点,如果未被访问,就立即改 visited [i]为1,防止它被多次访问。并
且以该顶点为新的起始点,继续进行深度 优先遍历,否则继续检查下一 个未被访问的顶点。
3 DFS的实现过程
12 34 5 6
1 0 01 01 10 0 0
2 01 0 0 0 10 0
3 01 0 0 0 10 0
起点ຫໍສະໝຸດ Baidu
4 01 0 0 0 0 01
5 0 01 01 0 0 0
6 0 0 0 10 0 0
图的邻接矩阵
辅助数组 visited [n ]
10 0 1 1 1 1 1 20 1 1 1 1 1 1 30 0 0 1 1 1 1 40 0 0 0 0 1 1 50 0 0 0 1 1 1 60 0 0 0 0 0 1
图的遍历
主讲教师:李晓娜
目录 CONTENTS
1 图的遍历的定义 2 深度优先遍历的基本思想 3 深度优先遍历的实现过程
1 图的遍历的定义
图的遍历
从图的任意指定顶点出发,依照某种规则去访问图中所有顶 点,且每个
顶点仅被访问一次,这一过程叫做图的遍历。 遍历实质:找每个顶点的邻接点的过程。
深度优先遍历
广度优先遍历
2 DFS基本思想
深度优先遍历
深度优先遍历(Depth_First Search,DFS)是指按照深度方向搜索 ,它
类似于树的先根遍历。 (1) 从图中某个顶点Vi出发,首先访问Vi。 (2) 选择一个与刚访问过的顶点Vi相邻接且未访问过的顶点Vj,并访问该顶点。以该 顶点为新顶点,重复步骤(2),直到当前顶点的邻接顶点都已被访问为止。 (3) 返回前一个访问过的且仍有未访问的邻接点的顶点,找出并访问该顶点的下一 个未被访问的邻接点,然后重复步骤(2)。
2 DFS基本思想
例:深度优先遍历
v0
v1
v2
v3
v6 v7 v8
VV00
V11
V66
VV22
V33 VV77 VV88
v4 v5 (a)
VV44 VV55
由此,得到顶点访问序列为:
v0->v1->v2->v3->v4->v5->v6->v7->v8
思考:还能生成其他序列吗?
如何判别顶点V的邻接点是否被访问?
DFS 结果 v2→v1→v3→v5→v4→v6
谢谢学习
主讲教师:李晓娜
1 图的遍历的定义
图的特殊性
图没有“自然”的首结点
• 图的任意一个顶点都可作为第一个被访问的首结点
非连通图中,从一个顶点出发,只能够访问它所在的连通分量上的所有顶点
• 需考虑如何选取下一个出发点以访问其余连通分量
图中若有回路存在,则一个顶点被访问之后,有可能沿回路又回到该顶点
• 区分已访问顶点、未访问顶点 搜索路径
2 DFS基本思想
解决办法:为每个顶点设立一个“访问标志”位。可设置
一个辅助数组 visited [n],用来标记每个被访问过的顶点。
初始状态,将图中每个顶点的访问标志设为 0,之后搜索图中每个顶
点,如果未被访问,就立即改 visited [i]为1,防止它被多次访问。并
且以该顶点为新的起始点,继续进行深度 优先遍历,否则继续检查下一 个未被访问的顶点。
3 DFS的实现过程
12 34 5 6
1 0 01 01 10 0 0
2 01 0 0 0 10 0
3 01 0 0 0 10 0
起点ຫໍສະໝຸດ Baidu
4 01 0 0 0 0 01
5 0 01 01 0 0 0
6 0 0 0 10 0 0
图的邻接矩阵
辅助数组 visited [n ]
10 0 1 1 1 1 1 20 1 1 1 1 1 1 30 0 0 1 1 1 1 40 0 0 0 0 1 1 50 0 0 0 1 1 1 60 0 0 0 0 0 1