各个算法的大致思路和作用:
一、求最小生成树:
•prim算法:找边并入,判断是否会构成环
•Kruscal算法:并入最近的点
二、拓扑排序:一个个的找到入度为零的点
三、关键路径
四、求最短路:
Dijkstra:找路径最短的点
Floyd:https://www.cnblogs.com/GumpYan/p/5540549.html
2-22
若无向图G =(V,E)中含10个顶点,要保证图G在任何情况下都是连通的,则需要的边数最少是: (3分)3
- 9
- 36
- 37
- 45
10个顶点,看10-1=9个,看成每个顶点都和其他顶点直接相连,也就是8*9/2=36个,之后加上相连的最后一个,为37个
一个有N个顶点的强连通图至少有多少条边? (2分)b
- null
- N+1
- N
- N(N−1)
- N−1
强连通图是有向图,任意的两点之间可以连通
2-32
如果G是一个有28条边的非连通无向图,那么该图顶点个数最少为多少? (3分)B
- null
- 10
- 9
- 8
- 7
2-33
下列说法不正确的是: (2分)B
- null
- 遍历的基本算法有两种:深度遍历和广度遍历
- 图的深度遍历不适用于有向图
- 图的深度遍历是一个递归过程
- 图的遍历是从给定的源点出发每一个顶点仅被访问一次
2-38
下面给出的有向图中,有__个强连通分量。(2分)B
- null
- 5 ({0}, {1}, {2}, {3}, {4})
- 2 ({1,2,3,4}, {0})
- 1 ({1,2,3,4})
- 1 ({0,1,2,3,4})
强连通分量是在这个分量中任意两个点有通路
2-2
在N个顶点的无向图中,所有顶点的度之和不会超过顶点数的多少倍? (2分)A
2-3
- null
- N−1
- (N−1)/2
- 2
- 1
给定无向图G,从V0出发进行深度优先遍历访问的边集合为: {(V0,V1), (V0,V4), (V1,V2), (V1,V3), (V4,V5), (V5,V6)}。则下面哪条边不可能出现在G中? (3分)b
带进去试试
- null
- (V4,V6)
- (V1,V5)
- (V0,V6)
- (V0,V2)
2-5
已知一个图的邻接矩阵如下,则从顶点V1出发按深度优先搜索法进行遍历,可能得到的一种顶点序列为: (2分)C
从最开始的节点开始,向后找,如果遇到输出过的就跳过这一个继续向右看
- null
- V1,V3,V5,V6,V4,V2
- V1,V3,V5,V2,V4,V6
- V1,V2,V4,V5,V6,V3
- V1,V2,V3,V4,V5,V6
2-7
已知无向图G含有16条边,其中度为4的顶点个数为3,度为3的顶点个数为4,其他顶点的度均小于3。图G所含的顶点个数至少是:(4分)b
- null
- 15
- 13
- 11
- 10
列方程
-11
设N个顶点E条边的图用邻接表存储,则求每个顶点入度的时间复杂度为: (2分)c
- null
- O(N2)
- O(N×E)
- O(N+E)
- O(N)
邻接表和邻接矩阵不一样
邻接表是:每次访问一下他的头结点,之后访问后面的那些边,相加
2-21
已知一个图的邻接矩阵如下,则从顶点V1出发按广度优先搜索法进行遍历,可能得到的一种顶点序列为: (2分)d
- null
- V1,V3,V5,V6,V4,V2
- V1,V3,V5,V2,V4,V6
- V1,V2,V4,V5,V6,V3
- V1,V2,V3,V5,V4,V6
可以用队列和栈
2-22
若无向图G =(V,E)中含10个顶点,要保证图G在任何情况下都是连通的,则需要的边数最少是: (3分)d
- null
- 9
- 36
- 37
- 45
2-2
若将n个顶点e条弧的有向图采用邻接表存储,则拓扑排序算法的时间复杂度是:(1分)b
- null
- O(n×e)
- O(n+e)
- O(n2)
- O(n)
拓扑排序就是:
(1)找出入度为0的顶点,入栈,删掉他所发出去边。
(2)开始循环:找到其中一个入度为零的顶点, 入栈,之后删除发出的所有的边
(3)进行循环,一直到图中没有节点或者只剩下环为止
下图为一个AOV网,其可能的拓扑有序序列为: (2分)B
- null
- ADFCEBG
- ABDCEFG
- ACDFBEG
- ABCDFEG
2-2
若要求在找到从S
到其他顶点最短路的同时,还给出不同的最短路的条数,我们可以将Dijkstra算法略作修改,增加一个count[]
数组:count[V]
记录S
到顶点V
的最短路径有多少条。则count[V]
应该被初始化为: (3分)d
到自身至少有一个路径
- null
count[S]=0;
对于其他顶点V
则令count[V]=1
- 对所有顶点都有
count[V]=0
- 对所有顶点都有
count[V]=1
count[S]=1;
对于其他顶点V
则令count[V]=0
2-3
使用迪杰斯特拉(Dijkstra)算法求下图中从顶点1到其他各顶点的最短路径,依次得到的各最短路径的目标顶点是:(2分)c
- null
- 5, 2, 4, 3, 6
- 5, 2, 6, 3, 4
- 5, 2, 3, 6, 4
- 5, 2, 3, 4, 6
注意要求是把顶点按顺序弄出来
这个算法的具体步骤:
(1)先找到一个起始点,写出他到其他点的距离
(2)找到一个最近的点,标记已经取出并输出,以他为标准,更新其他边的最近距离:有两种情况
①原来的就是最近的
②为标准的那个点的长度加上标准点到这个点的路径的距离比原来的更小,更新
(3)重复上面的过程,知道所有的点都已经输出了
在AOE网中,什么是关键路径? (1分)B
关键路径的求法:
先求ve:初始化所有的都是0,之后按拓扑来,只是在消去每一个点的时候都要更新一下ve的值,找到加上消去的点的距离到这个点的距离与原来的这个数的最大值。
再求vl:先初始化为最长的那个路的大小,之后从这个最远的按拓扑排序反过来看,找最小的数
- null
- 最长回路
- 从第一个事件到最后一个事件的最长路径
- 从第一个事件到最后一个事件的最短路径
- 最短回路