目录
5.1 图的基本概念
知识点一:
1.在无向图中,若任意两个顶点之间都存在边,则称该图为无向完全图。含有n个顶点的无向完全图有n(n-1)/2条边。
2.在有向图中,若任意两个顶点之间都存在方向相反的两条弧,则称该图为有向完全图。含有n个顶点的有向完全图有n(n-1)边
赶紧做两道题来消化知识点!
(1)若无向图G=(V,E)中含有7个顶点,要保证图G在任何情况下都是连通的,则需要的边数最少是()?
答案:16
解析:要保证在任何情况下都连通,6个顶点的完全无向图,有15条边,此时我随便加一个顶点进去,无论任何情况,我都满足连通的条件,于是边数=15+1=16
(2)一个有28条边的非连通无向图至少有( )个顶点?
答案:9
解析:完全图的边数是最多的,8个顶点的无向完全图有28条边,但此时是连通的呀,我再加一个顶点,就构成了非连通无向图,此时的顶点个数为9.此题的思想和(1)刚好是反着来的。
知识点二:
1.连通分量:极大连通子图,要求该连通子图包含其所有的边
2.生成树:包含图中全部顶点的一个极小连通子图,连通子图无环,且删去任意一条路径都不再连通
做题巩固:
1.设有无向图G=(V,E)和G'=(V',E'),若G'是G的生成树,则下列不正确的是
I.G'为G的连通分量
II.G'为G的无环子图
III.G'为G的极小连通子图且V''=V
答案:I;根据知识点中的内容易得
2.若具有n个顶点的图是一个环,则它有几棵生成树?
A. B.n C.n-1 D.1
答案:
B n个顶点的环,有n条边,任意删去一条边,都不再连通。根据生成树的定义,则有n棵生成树。
知识点三:
1.对无环有向图中的顶点号进行拓扑排序,对应的顶点号构成的邻接矩阵中所有的1都在对角线以上的部分
2.有向无环图是不含环状图形的有向图吗?经典错误,如果一个有向图从某个顶点出发经过若干条边回到该顶点,称为有向无环图
做题巩固:
如何对无环有向图中的顶点号重新安排可使得该图的邻接矩阵中所有的1都集中到对角线以上?
答案:将顶点号进行拓扑排序即可,下面举个例子体会一下
5.2图的存储基本操作
知识点一:
1.对于带权图的邻接矩阵,用∞来代表这两个顶点之间不存在边
2.邻接矩阵表示法的空间复杂度为O(n^2),其中n为顶点的边数
及时做题巩固知识点吧!
题目:1.带权有向图G用邻接矩阵存储,则Vi的入度等于邻接矩阵中
A:第i行非∞的元素个数 B:第i行非∞的元素个数
C:第i行非∞且非0的元素个数 D:第i列非∞且非0的元素个数
答案:D,根据知识点就可以回答
知识点二:
无向图A的邻接矩阵,0表示无边,1表示有边;那么A^2中,0,1,2这些数据又表示什么意思呢?
先给出结论,比如0行2列元素的值为3,就表示0到2这个顶点,有3条不同路径长度为2的边
再试着分析:
我们学过线代知道,矩阵的乘法是对位相乘,下面举个例子:
还可以更加延伸,如果是A^n矩阵中对角线以外非零元素的含义是什么?就是某个顶点到某个顶点之间距离为n的路径条数
5.3图的遍历
题目:
对于有n个顶点,e条边的图采用邻接表表示时,进行DFS遍历的时间复杂度为?
同样,问进行BFS遍历的时间复杂度?
答案:
不管是深搜还是广搜,都是需要把图给遍历完的。邻接表有n个顶点节点,2e个边表节点,应该是O(n+2e)吧?经典错误
只需要访问e个边表节点就行了,重复的不再访问。
延伸:对于上题,把邻接表换成邻接矩阵,那他们的时间复杂度又是多少呢?
答案:
邻接矩阵是一个n^2的矩阵,里面存储着顶点和顶点之间边的信息
无论是深搜和广搜,他都要把整个邻接矩阵遍历完,故O(n^2)
知识点一:
1.拓扑排序的方法:
题目:
使用DFS算法递归遍历一个无环有向图,并在退出递归时输出相应顶点,这样得到的顶点序列是
A.逆拓扑有序 B.拓扑有序 C.无序的 D.都不是
答案:
这种题目自己举一个例子就好了,并且要知道什么是拓扑有序,根据知识点来构造
5.4图的应用:
知识点一:
需要很好的记住这个例子,其拓扑排序唯一,但是其中有顶点的入度不为1
赶快做题巩固一下吧:
以下关于拓扑排序的说法中,错误的是()
I.若某有向图存在环路,则该有向图一定不存在拓扑排序
II.在拓扑排序算法种暂存入度为0的顶点,可以使用栈,也可以使用队列
III.若有向图的拓扑有序序列唯一,则图中每个顶点的入度和出度最多为一
答案:D;根据知识点中的例子,虽然拓扑排序唯一,但是顶点的入度可以有2个
知识点二:
邻接表存储的有向图使用拓扑排序时,首先我们需要把入度为0的顶点全部放到栈里面,然后输出这个顶点的时候,这个点就会被删除。用我们手操的时候,删除就是直接把这个点和相连的边划去,实际上用代码表示,是把相关的顶点的计数器cout值减去1,一共要减去多少次呢,n次。这样说还是比较抽象,直接去看另一篇博文:https://blog.csdn.net/lingchen2348/article/details/53943260
做题巩固一下吧:
若对n个顶点,e条弧的有向图采用邻接表存储,则拓扑排序算法的时间复杂度是()
A.O(n) B.O(n+e) C.O(n^2) D.O(ne)
答案:B;记住即可,但是理解了更好。