结构C语言版第章图文档格式.docx
《结构C语言版第章图文档格式.docx》由会员分享,可在线阅读,更多相关《结构C语言版第章图文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
=2
D(v2>
=2 ID(v2>
=1 OD(v2>
=1
D(v3>
=3 ID(v3>
=2 OD(v3>
D(v4>
=2 ID(v4>
=1 OD(v4>
邻接表:
(注意边表中邻接点域的值是顶点的序号,这里顶点的序号是顶点的下标值-1>
vertexfirstedge
next
┌─┬─┐
┌─┬─┐
┌─┬─┐
0│v1│ ─→│1│ ─→│3│∧│
├─┼─┤
└─┴─┘
1│v2│ ─→│2│∧│
├─┼─┤
2│v3│ ─→│0│∧│
3│v4│ ─→│2│∧│
└─┴─┘
逆邻接表:
0│v1│ ─→│2│∧│
1│v2│ ─→│0│∧│
2│v3│ ─→│1│ ─→│3│∧│
3│v4│ ─→│0│∧│
邻接矩阵:
0101
0010
1000
2.对n个顶点的无向图和有向图,采用邻接矩阵和邻接表表示时,如何判别下列有关问题?
(1>
图中有多少条边?
(2>
任意两个顶点i和j是否有边相连?
(3>
任意一个顶点的度是多少?
【解】
对于n个顶点的无向图和有向图,用邻接矩阵表示时:
设m为矩阵中非零元素的个数
无向图的边数=m/2
有向图的边数=m
无论是有向图还是无向图,在矩阵中第i行,第j列的元素若为非零值,则该两顶点有边相连。
对于无向图,任一顶点i的度为第i行中非零元素的个数。
对于有向图,任一顶点i的入度为第i列中非零元素的个数,出度为第i行中非零元素的个数,度为入度出度之和。
当用邻接表表示时:
对于无向图,图中的边数=边表中结点总数的一半。
对于有向图,图中的边数=边表中结点总数。
对于无向图,任意两顶点间是否有边相连,可看其中一个顶点的邻接表,若表中的adjvex域有另一顶点位置的结点,则表示有边相连。
对于有向图,则表示有出边相连。
对于无向图,任意一个顶点的度则由该顶点的边表中结点的个数来决定。
对于有向图,任意一个顶点的出度由该顶点的边表中结点的个数来决定,入度则需遍历各顶点的边表。
(用逆邻接表可容易地得到其入度。
>
3.DFS和BFS遍历各采用什么样的数据结构来暂存顶点?
当要求连通图的生成树的高度最小,应采用何种遍历?
DFS遍历采用栈来暂存顶点。
BFS采用队列来暂存顶点。
当要求连通图的生成树的高度最小时,应采用BFS遍历。
4.对下图所示的连通图,请分别用Prim和Kruskal算法构造其最小生成树。
5.什么样的DAG的拓扑序列是唯一的?
确定了排序的源点,DAG图中无前趋顶点只有一个且从该点到终点只有一条路径时,它的拓扑序列才
6.请以V0为源点,给出用DFS搜索下图得到的逆拓扑序列。
逆拓扑序列是:
V4V2V1V0V1V6V5
是唯一的。
习题精选
1.选择题
<
1)在一个图中,所有顶点的度数之和等于图的边数的<
)倍。
A.1/2B.1C.2D.4
2)在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的<
A.1/2B.1C.2D.4
3)具有n个顶点的有向图最多有<
)条边。
A.nB.n(n-1>
C.n(n+1>
D.n2
4)n个顶点的连通图用邻接距阵表示时,该距阵至少有<
)个非零元素。
A.nB.2(n-1>
C.n/2D.n2
5)G是一个非连通无向图,共有28条边,则该图至少有<
)个顶点。
A.7B.8C.9D.10
6)若从无向图的任意一个顶点出发进行一次深度优先搜索可以访问图中所有的顶点,则该图一定是<
)图。
A.非连通B.连通C.强连通D.有向
7)下面<
)算法适合构造一个稠密图G的最小生成树。
A.Prim算法B.Kruskal算法C.Floyd算法D.Dijkstra算法
8)用邻接表表示图进行广度优先遍历时,通常借助<
)来实现算法。
A.栈B.队列C.树D.图
9)用邻接表表示图进行深度优先遍历时,通常借助<
10)深度优先遍历类似于二叉树的<
)。
A.先序遍历B.中序遍历C.后序遍历D.层次遍历
11)广度优先遍历类似于二叉树的<
A.先序遍历B.中序遍历C.后序遍历D.层次遍历
12)图的BFS生成树的树高比DFS生成树的树高<
A.小B.相等C.小或相等D.大或相等
A.0243156
B.0136542
C.0134256
D.0361542
13)已知图的邻接矩阵如下图所示,则从顶点0出发按深度优先遍历的结果是<
邻接矩阵
14)已知图的邻接表如下图所示,则从顶点0出发按广度优先遍历的结果是<
),按深度优先遍历的结果是<
A.0132B.0231
C.0321D.0123
邻接表
15)下面<
)方法可以判断出一个有向图是否有环。
A.深度优先遍历B.拓扑排序C.求最短路径D.求关键路径
2.应用题
1)已知如图6.27所示的有向图,请给出:
每个顶点的入度和出度;
邻接矩阵;
邻接表;
逆邻接表。
图6.27有向图
2)已知如图6.28所示的无向网,请给出:
最小生成树
图6.28无向网
a
→
b
4
c
3
5
d
e
9
^
h
7
f
6
g
4^
2
3)已知图的邻接矩阵如6.29所示。
试分别画出自顶点1出发进行遍历所得的深度优先生成树和广度优先生成树。
图6.29邻接矩阵
4)有向网如图6.30所示,试用迪杰斯特拉算法求出从顶点a到其他各顶点间的最短路径,完成表6.9。
图6.30有向网
D
终点
i=1
i=2
i=3
i=4
i=5
i=6
15
(a,b>
(a,c>
12
(a,d>
11
(a,c,f,d>
∞
10
(a,c,e>
(a,c,f>
16
(a,c,f,g>
14
(a,c,f,d,g>
S
终点集
{a,c}
{a,c,f}
{a,c,f,e}
{a,c,f,e,d}
{a,c,f,e,d,g}
{a,c,f,e,d,g,b}
5)试对图6.31所示的AOE-网:
求这个项目最早可能在什么时间结束;
求每个活动的最早开始时间和最迟开始时间;
图6.31AOE-网
确定哪些活动是关键活动
【解答】按拓扑有序的顺序计算各个顶点的最早可能开始时间Ve和最迟允许开始时间Vl。
然后再计算各个活动的最早可能开始时间e和最迟允许开始时间l,根据l-e=0?
来确定关键活动,从而确定关键路径。
1
2
3
4
5
6
Ve
0
19
15
29
38
43
Vl
37
38
1,2>
1,3>
3,2>
2,4>
2,5>
3,5>
4,6>
5,6>
l
17
27
l-e
8
12
此项目最早完成时间为43。
关键路径为<
3.算法设计题
1)分别以邻接矩阵和邻接表作为存储结构,实现以下图的基本操作:
增添一个新顶点v,InsertVex(G,v>
;
删除顶点v及其相关的边,DeleteVex(G,v>
。
增加一条边<
v,w>
,InsertArc(G,v,w>
删除一条边<
,DeleteArc(G,v,w>
//本题中的图G均为有向无权图,其余情况容易由此写出
StatusInsert_Vex(MGraph&
G,charv>
//在邻接矩阵表