3.2,4
4。
在一个具有n个顶点的无向图中,要连通所有顶点则至少需要________条边。
4.n-1
5。
表示图的两种存储结构为__________和__________.5。
邻接矩阵,邻接表
6。
在一个连通图中存在着________个连通分量。
6.1
7.图中的一条路径长度为k,该路径所含的顶点数为________.7。
k+1
8。
若一个图的顶点集为{a,b,c,d,e,f},边集为{(a,b),(a,c),(b,c),(d,e)},则该图含有________个连通分量。
8.3
9。
对于一个具有n个顶点的图,若采用邻接矩阵表示,则矩阵大小至少为________⨯________。
9.n,n
10。
对于具有n个顶点和e条边的有向图和无向图,在它们对应的邻接表中,所含边结点的个数分别为________和________。
10。
2e,e
11.在有向图的邻接表和逆邻接表表示中,每个顶点邻接表分别链接着该顶点的所有________和________结点。
11。
出边,入边
12。
对于一个具有n个顶点和e条边的无向图,当分别采用邻接矩阵和邻接表表示时,求任一顶点度数的时间复杂度分别为________和________。
12。
O(n),O(e/n)
13.假定一个图具有n个顶点和e条边,则采用邻接矩阵和邻接表表示时,其相应的空间复杂度分别为________和________。
13。
O(n2),O(n+e)
14。
一个图的边集为{(a,c),(a,e),(b,e),(c,d),(d,e)},从顶点a出发进行深度优先搜索遍历得到的顶点序列为____________,从顶点a出发进行广度优先搜索遍历得到的顶点序列为____________。
14。
acdeb,acedb(答案不唯一)
15。
一个图的边集为{〈a,c>,〈a,e〉,,,〈e,d〉},从顶点a出发进行深度优先搜索遍历得到的顶点序列为____________,从顶点a出发进行广度优先搜索遍历得到的顶点序列为____________。
15。
acfebd,acefbd(答案不唯一)
16.图的________优先搜索遍历算法是一种递归算法,图的________优先搜索遍历算法需要使用队列。
16.深度,广度
17.对于一个具有n个顶点和e条边的连通图,其生成树中的顶点数和边数分别为________和________。
17。
n,n—1
18.若一个连通图中每个边上的权值均不同,则得到的最小生成树是________(唯一/不唯一)的.18.唯一
19。
根据图的存储结构进行某种次序的遍历,得到的顶点序列是__(唯一/不唯一)的。
19。
唯一
20.假定一个有向图的边集为{〈a,c>,〈a,e〉,,,},对该图进行拓扑排序得到的顶点序列为________.20。
aebdcf(答案不唯一)
三、应用题
1.对于一个无向图6—11(a),假定采用邻接矩阵表示,试分别写出从顶点0出发按深度优先搜索遍历得到的顶点序列和按广度优先搜索遍历得到的顶点序列。
注:
每一种序列都是唯一的,因为都是在存储结构上得到的.
1。
深度优先搜索序列:
0,1,2,8,3,4,5,6,7,9
广度优先搜索序列:
0,1,4,2,7,3,8,6,5,9
2。
对于一个有向图6—11(b),假定采用邻接表表示,并且假定每个顶点单链表中的边结点是按出边邻接点序号从大到小的次序链接的,试分别写出从顶点0出发按深度优先搜索遍历得到的顶点序列和按广度优先搜索遍历得到的顶点序列.
注:
每一种序列都是唯一的,因为都是在存储结构上得到的.
2。
深度优先搜索序列:
0,4,7,5,8,3,6,1,2
广度优先搜索序列:
0,4,3,1,7,5,6,2,8
3.已知一个无向图的邻接矩阵如图6-12(a)所示,试写出从顶点0出发分别进行深度优先和广度优先搜索遍历得到的顶点序列。
3.深度优先搜索序列:
0,2,3,5,6,1,4
广度优先搜索序列:
0,2,3,5,6,1,4
4。
已知一个无向图的邻接表如图6—12(b)所示,试写出从顶点0出发分别进行深度优先和广度优先搜索遍历得到的顶点序列。
4。
深度优先搜索序列:
0,3,6,4,1,5,2
广度优先搜索序列:
0,3,2,6,5,4,1
5.已知图6—13所示的一个网,按照Prim方法,从顶点1出发,求该网的最小生成树的产生过程.
5.过程如图6-16所示
6。
已知图6-13所示的一个网,按照Kruskal方法,求该网的最小生成树的产生过程。
6.求解过程如图6-17所示。
7.图6-14所示为一个有向网图及其带权邻接矩阵,要求对有向图采用Dijkstra算法,求从V0到其余各顶点的最短路径.
7.求解过程如下表所示。
终点
从v0到各终点的D值和最短路径的求解过程
i=1
i=2
i=3
i=4
i=5
V1
∞
∞
∞
∞
∞
无
V2
10(v0,v2)
V3
∞
60(v0,v2,v3)
50
(v0,v4,v3)
V4
30
(v0,v4)
30
(v0,v4)
V5
100
(v0,v5)
100
(v0,v5)
90
(v0,v4,v5)
60(v0,v4,v3,v5)
Vj
V2
V4
V3
V5
S
{v0,v2}
{v0,v2,v4}
{v0,v2,v3,v4}
{v0,v2,v3,v4,v5}
8。
图6—15给出了一个具有15个活动、11个事件的工程的AOE网,求关键路径。
8.求解过程如下:
①事件的最早发生时间ve[k]。
ve
(1)=0
ve
(2)=3
ve(3)=4
ve(4)=ve
(2)+2=5
ve(5)=max{ve
(2)+1,ve(3)+3}=7
ve(6)=ve(3)+5=9
ve(7)=max{ve(4)+6,ve(5)+8}=15
ve(8)=ve(5)+4=11
ve(9)=max{ve(8)+10,ve(6)+2}=21
ve(10)=max{ve(8)+4,ve(9)+1}=22
ve(11)=max{ve(7)+7,ve(10)+6}=28
②事件的最迟发生时间vl[k]。
vl(11)=ve(11)=28
vl(10)=vl(11)—6=22
vl(9)=vl(10)-1=21
vl(8)=min{vl(10)—4,vl(9)-10}=11
vl(7)=vl(11)-7=21
vl(6)=vl(9)-2=19
vl(5)=min{vl(7)-8,vl(8)—4}=7
vl(4)=vl(7)-6=15
vl(3)=min{vl(5)—3,vl(6)—5}=4
vl
(2)=min{vl(4)-2,vl(5)-1}=6
vl
(1)=min{vl
(2)—3,vl(3)-4}=0
③活动ai的最早开始时间e[i]和最晚开始时间l[i]。
活动a1e
(1)=ve
(1)=0l
(1)=vl
(2)—3=3
活动a2e
(2)=ve
(1)=0l
(2)=vl(3)-4=0
活动a3e(3)=ve
(2)=3l(3)=vl(4)-2=13
活动a4e(4)=ve
(2)=3l(4)=vl(5)-1=6
活动a5e(5)=ve(3)=4l(5)=vl(5)-3=4
活动a6e(6)=ve(3)=4l(6)=vl(6)—5=14
活动a7e(7)=ve(4)=5l(7)=vl(7)-6=15
活动a8e(8)=ve(5)=7l(8)=vl(7)-8=13
活动a9e(9)=ve(5)=7l(9)=vl(8)—4=7
活动a10e(10)=ve(6)=9l(10)=vl(9)—2=19
活动a11e(11)=ve(7)=15l(11)=vl(11)—7=21
活动a12e(12)=ve(8)=11l(12)=vl(10)—4=18
活动a13e(13)=ve(8)=11l(13)=vl(9)—10=11
活动a14e(14)=ve(9)=21l(14)=vl(10)—1=21
活动a15e(15)=ve(10)=22l(15)=vl(11)-6=22
④最后,比较e[i]和l[i]的值可判断出a2,a5,a9,a13,a14,a15是关键活动,关键路径如图6—18所示.
四、算法设计题
1。
编写一个算法,求出邻接矩阵表示的无向图中序号为numb的顶点的度数.
intdegree1(Graph&ga,intnumb)
1。
intdegree1(Graph&ga,intnumb)
{//根据无向图的邻接矩阵求出序号为numb的顶点的度数
intj,d=0;
for(j=0;jvexnum;j++)
if(ga。
cost[numb][j]!
=0&&ga。
cost[numb][j]!
=MAXINT)
d++;
return(d);
}
2.编写一个算法,求出邻接矩阵表示的有向图中序号为numb的顶点的度数。
intdegree2(Graph&ga,intnumb)
2。
intdegree2(Graph&ga,intnumb)
//根据有向图的邻接矩阵求出序号为numb的顶点的度数
{inti,j,d=0;
//求出顶点numb的出度
for(j=0;jvexnum;j++)
if(ga.cost[numb][j]!
=0&&ga.cost[numb][j]!
=MAXINT)
d++;
//求出顶点numb的入度
for(i=0;ivexnum;i++)
if(ga.cost[i][numb]!
=0&&ga。
cost[i][numb]!
=MAXINT)
d++;
//返回顶点numb的度
return(d);
}
3。
编写一个算法,求出邻接表表示的无向图中序号为numb的顶点的度数。
intdegree3(GraphL&gl,intnumb)
3.intdegree3(GraphL&gl,intnumb)
//根据无向图的邻接表求出序号为numb的顶点的度数
{intd=0;
vexnode*p=gl。
adjlist[numb];
while(p!
=NULL)
{d++;
p=p-〉next;
}
return(d);
}
4。
编写一个算法,求出邻接表表示的有向图中序号为numb的顶点的度数.
intdegree4(GraphL&gl,intnumb)
4。
intdegree4(GraphL&gl,intnumb)
//根据有向图的邻接表求出序号为numb的顶点的度数
{intd=0,i;
vexnode*p=gl.adjlist[numb];
while(p!
=NULL)
{d++;
p=p—〉next;
}//求出顶点numb的出度
for(i=0;i〈gl.ve