数据结构习题精编图文档格式.docx
《数据结构习题精编图文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构习题精编图文档格式.docx(37页珍藏版)》请在冰豆网上搜索。
B.一个有向图的邻接表和逆邻接表中的结点个数一定相等。
C.无向图的邻接矩阵一定是对称的,有向图的邻接矩阵一定是不对称的。
D.用邻接矩阵存储图,所占用的存储空间大小只与图中顶点个数有关,而与图的
边数无关。
14.下列关于图的存储的说法中,正确的是
A.有e条边的无向图,在邻接表中有e个结点。
B.有向图中顶点V的度等于其邻接矩阵中第V行中的1的个数。
C.用邻接矩阵法存储一个图所需的存储单元数目与图的边数有关。
D.有n个顶点的无向图,采用邻接矩阵存储表示,图中的边数等于邻接矩阵中
非零元素的个数之和的一半。
15.具有n个顶点、e条边的无向图的邻接矩阵中,零元素的个数为
A.eB.2eC.n2-2eD.n2-1
16.n个顶点的连通图用邻接矩阵表示时,该矩阵中的非零元素至少有
A.n-1个B.n个C.2*(n-1)个D.n*(n-1)/2个
17.若用邻接矩阵表示一个有向图,则其中每一列包含的“1”的个数为
A.图中弧的条数B.图中每个顶点的入度
C.图中每个顶点的出度D.图中强连通分量的数目
18.下面结构中,最适于表示稀疏无向图的是
A.邻接矩阵B.十字链表C.逆邻接表D.邻接多重表
19.如果某图的邻接矩阵是对角线元素均为零的上三角矩阵,则此图是
A.连通图B.强连通图C.有向无环图D.有向完全图
20.下列有关无向图的邻接矩阵的说法中,正确的是
A.矩阵中的非零元素个数等于图中的边数。
B.矩阵中非全零行的行数等于图中的顶点数。
C.第i行和第i列上非零元素的总数等于顶点vi的度数。
D.第i行上的非零元素个数和第i列的非零元素个数一定相等。
21.对于含n个顶点和e条边的图,采用邻接矩阵存储表示的空间复杂度为
A.O(n)B.O(e)C.O(n+e)D.O(n2)
22.设无向图G的邻接表如图1所示,则图G的边数为
图1G的邻接表
A.4B.5C.10D.20
23.若采用邻接表作为存储结构,则图的深度优先搜索类似于二叉树的
A.先序遍历B.中序遍历C.后序遍历D.层次遍历
24.若采用邻接表作为存储结构,则图的广度优先搜索类似于二叉树的
25.设无向图G=(V,E),其中V={a,b,c,d,e,f},E={(a,b),(a,e),(a,c),
(b,e),(c,f),(f,d),(e,d)}。
若从顶点a出发按深度优先搜索进行遍历,则可
能得到的顶点序列为
A.abecdfB.acfebdC.aebcfdD.aedfcb
26.设无向图G=(V,E),其中V={a,b,c,d,e,f},E={(a,b),(a,e),(a,c),
若从顶点a出发按广度优先搜索进行遍历,则可
A.abcedfB.abcefdC.acfdebD.aebcfd
27.图G的邻接表如图2所示,从顶点V1出发采用深度优先搜索法遍历图G,得到
的顶点序列是
图2图G的邻接表
A.V1V2V3V4V5B.V1V2V3V5V4C.V1V3V4V5V2D.V1V4V3V5V2
28.在图3所示的图G中,从顶点1出发进行深度优先遍历可得到的序列是
图3无向图G
A.1234567B.1246537C.1425367D.1426375
29.下列关于最小生成树的说法中,正确的是
A.任何无向图都存在最小生成树。
B.不同的求最小生成树的方法最后得到的生成树是相同的。
C.连通图上各边权值均不相同,则该图的最小生成树是唯一的。
D.在图G的最小生成树G1中,不可能有某条边的权值超过未选边的权值。
30.在有向图G的拓扑序列中,若顶点Vi在顶点Vj之前,则下列情形不可能出现
的是
A.G中有弧<
Vi,Vj>
B.G中有一条从Vi到Vj的路径
C.G中没有弧<
Vi,Vj>
D.G中有一条从Vj到Vi的路径
31.在用邻接表存储表示图时,拓扑排序算法时间复杂度为
A.O(n)B.O(n+e)C.O(n2)D.O(n3)
32.已知有向图G=(V,A),其中V={V1,V2,V3,V4,V5,V6,V7},
A={<
V1,V2>
,<
V1,V3>
V1,V4>
V2,V5>
V3,V5>
V3,V6>
,
<
V4,V6>
V5,V7>
V6,V7>
},则G的拓扑序列是
A.V1、V3、V4、V6、V2、V5、V7B.V1、V3、V2、V6、V4、V5、V7
C.V1、V3、V4、V5、V2、V6、V7D.V1、V2、V5、V3、V4、V6、V7
33.下列关于关键路径的说法中,正确的是
A.关键路径是AOE网中从源点到汇点的最短路径。
B.关键路径上某个活动的时间缩短,整个工程的时间也就必定缩短。
C.关键路径上活动的时间延长多少,整个工程的时间也就随之延长多少。
D.当改变网中某一关键路径上任一关键活动后,必将产生不同的关键路径。
34.求最短路径的Dijkstra算法的时间复杂度是
35.求解最短路径的Floyd算法的时间复杂度为
二、填空题
1.设无向图G中顶点数为n,则图G至少有________条边,至多有_________条边;
若G为有向图,则图G至少有________条边,至多有________条边。
2.设无向图G有n个顶点和e条边,每个顶点Vi的度为di(1<
=i<
=n),则e=______。
3.在有n个顶点的有向图中,若要使任意两点间可以互相到达,则至少需要______条弧。
在有n个顶点的有向图中,每个顶点的度最大可达______。
4.一个有n个结点的图,最少有________个连通分量,最多有________个连通分量。
5.n个顶点的连通无向图,其边的条数至少为______。
N个顶点的连通图的生成树含有______条边。
6.图4中的强连通分量的个数为______个。
图4有向图
7.在有向图中,以顶点v为终点的弧的数目称为v的______。
8.图的存储结构表示有____________、____________、十字链表、邻接多重表等多种存储结构。
其中,图的十字链表存储结构只适用于__________图,邻接多重表存储结构只适用于__________图。
9.n个顶点的连通图用邻接矩阵表示时,该矩阵至少有_______个非零元素。
10.有向图G用邻接矩阵A[n][n]存储,矩阵A的第i行的所有非零元素个数之和等于顶点i的_______。
11.在有向图的邻接矩阵表示中,计算第i个顶点入度的方法是____。
12.一个具有n个顶点e条边的无向图采用邻接表存储,则表头向量大小为______,邻接表中边结点个数为______。
13.在图G的邻接表表示中,每个顶点邻接表中所含的结点数,对于无向图来说等于该顶点的______,对于有向图来说等于该顶点的______。
14.n个顶点e条边的图,若采用邻接矩阵存储,则空间复杂度为_________;
若采用邻接表存储,则空间复杂度为_______________。
15.图的深度优先遍历类似于树的______遍历,它所用到的数据结构是_______;
图的广度优先遍历类似于树的__________遍历,它所用到的数据结构是__________。
16.设无向图G=(V,E),其中V={a,b,c,d,e},E={(a,b),(a,d),(a,c),(d,c),(b,e)}。
现用某一种图遍历方法从顶点a开始遍历图,得到的顶点访问序列为abecd,则采用的是__________遍历方法;
若得到的顶点访问序列为abdce,则采用的是__________遍历方法。
17.构造连通网最小生成树的两个典型算法是普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法。
一般来说,对稀疏图最好用___________算法求最小生成树,对稠密图最好用______________算法来求解最小生成树。
18.用普里姆(Prim)算法求具有n个顶点e条边的图的最小生成树的时间复杂度为______________,用克鲁斯卡尔(Kruskal)算法的时间复杂度是______________。
19.AOV网中,结点表示______,弧表示______________。
AOE网中,顶点表示______,弧表示______,弧上的权代表__________________。
20.设有向无环图G=(V,A),其中V={a,b,c,d,e,f,g},A={<
a,b>
a,c>
a,d>
b,e>
c,e>
d,e>
e,g>
e,f>
},则该有向无环图可以排出________种不同的拓扑序列。
三、解答题
1.已知有向图G如图5所示,回答下列问题。
(1)给出每个顶点的入度、出度。
(2)给出图G的邻接矩阵表示。
(3)给出图G的邻接表和逆邻接表。
(4)画出图G的各个强连通分量。
图5有向图G
2.设无向图G=(V,E),其中V={v1,v2,v3,v4,v5,v6},E={(v1,v2),(v1,v3),(v1,v5),(v1,v6),(v2,v3),(v2,v4),(v3,v4),(v4,v5),(v4,v6),(v5,v6)}。
(1)画出图G的邻接表。
(2)画出图G的邻接多重表。
(3)根据所画出的邻接表,分别写出从顶点v1出发对图G进行深度优先遍历和广度优先遍历的顶点序列。
3.
(1)对一个图进行遍历可以得到不同的遍历序列,导致得到的遍历序列不唯一的因素有哪些?
(2)已知无向图G的邻接表如图6所示,分别写出从顶点1出发的深度优先遍历和广度优先遍历序列,并画出相应的生成树。
图6无向图G的邻接表
4.设有向图G=(V,A),其中V={v1,v2,…,v9},A={<
v1,v3>
v1,v8>
v2,v3>
v2,v4>
v2,v5>
v3,v9>
v5,v6>
v8,v9>
v9,v7>
v4,v7>
v4,v6>
}。
(1)画出有向图G。
(2)指出图中所有的开始结点和终端结点。
(3)分别对图中的开始结点,给出一个拓扑序列。
并简单说明所给出序列的选定规则。
5.已知无向带权图G的邻接表如图7所示,其中边表结点的结构为(邻接点、权值、链域)。
图7无向带权图G的邻接表
(1)画出无向带权图G。
(2)写出图G的邻接矩阵。
(3)依此邻接表从顶点C出发进行深度优先遍历,画出由此得到的深度优先生成树。
(4)写出遍历过程中得到的从顶点C到其它各顶点的带权路径及其长度。
6.设某连通网N如图8所示,试回答下列问题。
(1)如果每个指针需要4个字节,每个顶点的标识占1个字节,每条边的权值占2个字节。
网N采用哪种存储表示法所需的空间较多?
为什么?
(2)画出以Kruskal算法构造最小生成树的过程。
图8某连通网N
7.已知带权图G如图9所示,试用普里姆(Prim)算法从顶点A开始求最小生成树。
在算法执行之初,顶点的集合U={A},边的集合TE={}。
试按照最小生成树的生成过程,分步给出加入顶点和边以后的集合U和TE的值。
图9带权图G
8.已知有6个顶点(顶点编号为0~5)的有向带权图G,其邻接矩阵A为上三角矩阵,按行序优先保存在如下的一维数组中。
4
6
∞
5
3
(1)写出图G的邻接矩阵A。
(2)画出有向带权图G。
(3)求图G的关键路径,并计算该关键路径的长度。
9.某工程各工序之间的优先关系和各工序所需时间如表1所示。
(1)画出相应的AOE网。
(2)列出各事件的最早发生时间,最迟发生时间。
(3)找出关键路径并指明完成该工程所需最短时间。
表1某工程各工序间的优先关系和各工序所需时间一览表
工序代号
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
所需时间
8
7
10
9
13
19
2
14
前驱工作
-
D,E
F,G
H,L
J,K,M
10.利用Dijkstra算法求图10中从顶点a到其他各顶点间的最短路径,要求利用表格给出求解过程。
图10带权有向图G
四、分析题
1.已知邻接表的头结点和表结点的结构如下:
表结点
头结点
adjvex
nextarc
info
data
firstarc
下面函数的功能是计算采用邻接表存储表示的有向图G中顶点vi的入度。
请在空缺处填入合适的内容,将程序补充完整。
intCountInDegree(ALGraphG,inti)
{
intdegree,j;
ArcNode*p;
degree=0;
for(j=0;
j<
G.vexnum;
j++)
{
p=_______________;
//
(1)
while(_______________)//
(2)
{
if(_______________==i)//(3)
{
degree++;
break;
}
p=_______________;
//(4)
}
}
returndegree;
}
2.已知有向图的邻接表存储表示的类型定义如下:
#defineMAX_VERTEX_NUM20//最大顶点个数
typedefintInfoType;
typedefcharVertexType[5];
//顶点信息是一个最多4个字符的字符串
typedefstructArcNode{
intadjvex;
//该弧所指向的顶点的位置
structArcNode*nextarc;
//指向下一条弧的指针
InfoType*info;
//该弧相关信息的指针
}ArcNode;
typedefstructVNode{
VertexTypedata;
//顶点信息
ArcNode*firstarc;
//指向第一条依附该顶点的弧
}AdjList[MAX_VERTEX_NUM];
typedefstruct{
AdjListvertices;
intvexnum,arcnum;
//图的当前顶点数和弧数
GraphKindkind;
//图的种类标志
}ALGraph;
下面函数的功能是从有向图G中删除所有以顶点v为弧头的弧。
voidDeleteHeadArc(ALGraph&
G,VertexTypev)
inti,j;
ArcNode*p,*q;
for(i=0;
i<
++i)
if(strcmp(v,G.vertices[i].data)==0)
_______________;
//
(1)
if(i==G.vexnum)
cout<
"
所给弧头不存在!
endl;
return;
for(j=0;
G.vexnum;
j++)
//
(2)
while(p&
&
_______________)//(3)
q=p;
p=p->
nextarc;
if(p!
=NULL)
if(_______________)//(4)
q->
nextarc=p->
nextarc;
else
__________=p->
//(5)
deletep;
G.arcnum--;
3.已知图的邻接表表示的类型定义同本大题第2小题。
下面函数的功能是输出图G的深度优先生成树(或森林)的边。
boolvisited[MAX_VERTEX_NUM];
voidDFSTree(ALGraphG,inti)
visited[i]=___________;
p=G.vertices[i].firstarc;
while(p!
=NULL)
if(___________)//
(2)
cout<
G.vertices[i].data<
---"
G.vertices[p->
adjvex].data<
"
;
___________;
//(3)
___________;
//(4)
voidDFSForest(ALGraphG)
inti,cnt=0;
i<
i++)visited[i]=false;
i++)
if(___________)//(5)
cout<
第"
++cnt<
棵树的边有:
DFSTree(G,i);
4.设有向图G采用邻接表表示法,其类型定义同第2小题。
下面函数的的功能是对以邻接表表示的有向图G进行拓扑排序。
(1)阅读函数TopologicalSort,并在空缺处填入合适的内容,将程序补充完整。
voidTopologicalSort(ALGraphG,inttopo[])
inti,j,k,count=0;
intindegree[MAX_VERTEX_NUM];
SqQueueQ;
//Q为队列图11有向图G的邻接表
++i)
indegree[i]=CountInDegree(G,i);
//求各顶点的入度,函数见本大题第1小题
InitQueue(Q);
i++)
if(_____________)EnQueue(Q,i);
//①
while(!
QueueEmpty(Q))
j=GetHead(Q);
DeQueue(Q);
topo[count++]=j;
for(p=G.vertices[j].firstarc;
p;
p=p->
nextarc)
k=_____________;
//②
if(!
(--indegree[k]))____________;
//③
if(_____________)cout<
图G中存在有环路"
//④
(2)对于如图11所示的邻接表,执行函数TopologicalSort,后,数组topo[]的内容是什么?
请将结果填入下面的表格中。
i
1
Topo[i]
5.已知某有向图G采用邻接矩阵存储表示。
图的邻接矩阵表示定义如下:
#defineMaxMun20//图的最大顶点数
typedefstruct{
charvexs[MaxNum];
//字符类型的顶点表
intarcs[MaxNum][MaxNum];
//邻接矩阵
intn,e;
//图的顶点数和边(或弧)数
}MGraph;
//图的邻接矩阵结构描述
图g的定义为:
MGraphg={{'
a'
'
b'
c'
d'
e'
f'
g'
},{{0,1,1,1,0,0,0},{0,0,1,0,1,0,0},
{0,0,0,1,0,0,0},{0,0,0,0,0,0,1},{0,0,1,0,0,1,0},{0,0,0,0,0,0,1},{0,0,0,0,0,0,0}},7,10};
(1)画出该有向图。