数据结构-第六章(图的遍历)

注:这一节就是以广度优先算法和深度优先算法进行考察。在二刷的时候,我发现我得深度和广度的过程容易出错,故又把其视频看了一遍。并做出了对过程遍历的详细解释。

1.广度优先算法

类似与二叉树的层序遍历算法

 定义:

注意:英文缩写BFS。

 1.1基本思想

  1. 首先访问起始顶点v;
  2. 然后依次访问v的未访问过的邻接顶点、,...,;
  3. 然后依次访问、,...,的所有未被访问过的邻接顶点;
  4. 再从依次从这些访问过的邻接顶点出发,访问它们的所有未被访问过的邻接顶点;
  5. 依次类推,直到与V连通的所有顶点都被访问过为止。
  6. 若此时图中尚有顶点未被访问,则选另图中一个未曾被访问过的顶点作为起始顶点,重复上述过程,直到图中所有顶点都被访问过为止。

最简单的检验方法(做一题),看能不能在自己心中,把全过程说出来

 D选项可以改成a,b,e,c,d,f,g,h

1.2过程

1.3时间复杂度

2.深度优先算法

注:深度优先算法很好的诠释遍历的思想,其中还有回溯。

英文:(Depth-First-Search,DFS)类似于树的先序遍历算法

2.1基本思想

  1. 首先访问起始顶点v;
  2. 然后访问v的未访问过的邻接顶点。
  3. 然后访问的未被访问过的邻接顶点;
  4. 重复上述过程,当不能再向下访问时,依次退回到最近被访问的顶点,若它还有邻接顶点未被访问过,则从该点开始继续2~4的的过程。直到所有与起始顶点连通的顶点都被访问过为止。
  5. 若此时图中尚有顶点未被访问,则另选图中一个未曾被访问过的顶点作为起始顶点,重复上述1~4过程,直到图中所有顶点都被访问过为止。

 2.2定义与复杂度

 2.3过程

复习的时候,我觉得题型是千变万化的,但其中最深的内涵,基本上不变的。

二轮的时候,可以用这两个图直接,自己算,看不符合。

3.代码

BFS的:

 DFS代码:

4. 遍历得到的生成树、生成森林相关问题 

两者在有向图和无向图的考察:

广度优先搜索(BFS)

  • 无向图:
  • 连通图经过广度优先搜索后得到的遍历树为广度优先生成树。
  • 非连通无向图经过广度优先搜索后得到的遍历树集合为广度优先生成森林。
  • 有向图:
  • 强连通图经过广度优先搜索后得到的遍历树为广度优先生成树。
  • 非强连通有向图经过广度优先搜索后得到的遍历树集合为广度优先生成森林。

  • 王道教材上给的解释是只说了连通图,也就是无向图的生成森林问题。但举的例子又是一个有向图,很明显是牛头不对马嘴。具体怎么样不用管了,先按这样理解。
  • 图按邻接矩阵存储时表示是唯一的,故其广度优先生成树、森林也是唯一的。按邻接表法存储时是不唯一的,故其广度优先生成树、森林也是不唯一的。

深度优先搜索 (DFS)

  • 无向图:
  • 连通图经过深度优先搜索后得到的遍历树为深度优先生成树。
  • 非连通无向图经过深度优先搜索后得到的遍历树集合为深度优先生成森林。
  • 有向图:
  • 强连通图经过深度优先搜索后得到的遍历树为深度优先生成树。
  • 非强连通有向图经过深度优先搜索后得到的遍历树集合为深度优先生成森林。
  • 图按邻接矩阵存储时表示是唯一的,故其深度优先生成树、森林也是唯一的。按邻接表法存储时是不唯一的,故其深度优先生成树、森林也是不唯一的。

BFS与DFS综合对比 (这个我没有总结)-看的是落晴学长的(二刷的时候要转换成自己的语言

  • 对于无向图的广度优先生成树,起点到其他顶点的路径是图中对应的最短路径,即所有生成树中树高最小。此外,深度优先总是尽可能“深”地搜索图,因此路径可能会更长,故深度优先生成树的树高总是大于或等于广度优先生成树的树高。
  • 对于无向图而言,void BFSTraverse(Graph G)调用遍历函数(BFS或DFS)的次数为无向图的连通分量的个数。
  • 对于有向图而言,如果调用一次遍历函数(BFS或DFS)可以遍历到所有结点,不能说明该有向图强连通。调用遍历函数(BFS或DFS)的次数与有向图的强连通分量的个数无关,具体求强连通分量的算法见上述DFS算法的应用。

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值