数据结构第七章习题课Word文档下载推荐.docx
- 文档编号:22058269
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:15
- 大小:282.22KB
数据结构第七章习题课Word文档下载推荐.docx
《数据结构第七章习题课Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构第七章习题课Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
,VV2,V5>
VV3,V5>
VV3,V6>
VV4,V6>
VV5,V7>
VV6,V7>
},
G的拓扑序列是()。
A•Vl,V3,V4,V6,V2,V5,V7B.Vl,V3,V2,V6,V4,V5,V7
C.V1,V3,V4,V5,V2,V6,V7D.V1,V2,V5,V3,V4,V6,V7
10.若一个有向图的邻接矩阵中,主对角线以下的元素均为零,则该图的拓扑有序序列()。
A.存在B.不存在
11.一个有向无环图的拓扑排序序列()是唯一的
A.—定B.不一定
13.下列关于AOE网的叙述中,不正确的是()。
A.关键活动不按期完成就会影响整个工程的完成时间
B.任何一个关键活动提前完成,那么整个工程将会提前完成
C.所有的关键活动提前完成,那么整个工程将会提前完成
D.某些关键活动提前完成,那么整个工程将会提前完成
14■判断一个无向图是一棵树的条件是。
答:
有n个顶点,n-1条边的无向连通图
15.有向图G的强连通分量是指<
有向图的极大强连通子图
16.设无向图G有n个顶点和e条边,每个顶点Vi的度为di(1<
=i<
=n),则
e=答:
(d1+d2+••…+dn)/2
17.在有n个顶点的有向图中,若要使任意两点间可以互相到达,则至少需要
条弧。
答:
n
18.
在有n个顶点的有向图中,每个顶点的度最大可达<
20.N个顶点的连通图用邻接矩阵表示时,该矩阵
至少有非零元素。
2(N-1)
21.在有向图的邻接矩阵表示中,计算第I个顶点入度的方法是。
第I列非零元素个数
22.已知一无向图G=(V,E),其中V={a,b,c,d,e}E={(a,b),(a,d),(a,c),(d,c),(b,e)}
现用某一种图遍历方法从顶点a开始遍历图,得到的序列为abecd,则采用的是
历方法。
深度优先
23.为了实现图的广度优先搜索,除了一个标志数组标志已访问的图的结点外,还
需放被访问的结点以实现遍历。
队列
24.有一个用于n个顶点连通带权无向图的算法描述如下:
(1).设集合T1与T2,初始均为空;
(2).在连通图上任选一点加入T1;
(3).以下步骤重复n-1次:
a.在i属于T1,j不属于T1的边中选最小权的边;
b.该边加入T2。
上述算法完成后,T2中共有边,该算法称法,T2中的边构成图
的。
(1)n-1
(2)普里姆(3)最小生成树
25.有向图G可拓扑排序的判别条件是。
不存在环
26.有向图G=(V,E),其中V(G)={0,1,2,3,4,5},用<a,b,d>三元组表示弧<a,b>及弧上的
权d.E(G)为{V0,5,100>,V0,2,10X1,2,5X0,4,30X4,5,60X3,5,10X2,3,50X4,3,20>},则从源点0到顶点3的最短路径长度是,经过的中间顶点是。
50,经过中间顶点4
27.上面的图去掉有向弧看成无向图则对应的最小生成树的边权之和为。
75
28.AOV网中,结点表示—__,边表示______AOE网中,结点表示______
边表示。
(1)活动
(2)活动间的优先关系(3)事件(4)活动,边上的权代表活动持
续时间
29.当一个AOV网用邻接表表示时,可按下列方法进行拓扑排序。
(1).查邻接表中入度为的顶点,并进栈;
(2).若栈不空,则①输出栈顶元素Vj,并退栈;
②查Vj的直接后继Vk,对
Vk入度处理,处理方法是;
(3).若栈空时,输出顶点数小于图的顶点数,说明有,否则拓扑排序完
成。
(1)零
(2)Vk度减1,若Vk入度己减到零,则Vk顶点入栈(3)环
30.首先将如下图所示的无向图给出其存储结构的邻接链表表示,然后写出对其分
别进行深度,广度优先遍历的结果
31.已知某图的邻接表为
(1).写出此邻接表对应的邻接矩阵;
(2).写出由v1开始的深度优先遍历的序列;
(3).写出由v1开始的深度优先的生成树;
(4).写出由v1开始的广度优先遍历的序列;
(5).写出由v1开始的广度优先的生成树;
(6).写出将无向图的邻接表转换成邻接矩阵的算法
33.已知一个无向图如下图所示,要求分别用Prim和Kruskal算法生成最小树(假设以①为起点,试画出构造过程)。
34.G=(V,E)是一个带有权的连通图,则:
(1).请回答什么是G的最小生成树;
(2)
.G为下图所示,请找出G的所有最小生成树
35.一带权无向图的邻接矩阵如下图,试画出它的一棵最小生成树
36.请看下边的无向加权图。
(1).写出它的邻接矩阵
(2).按Prim算法求其最小生成树,并给出构造最小生成树过程中辅助数组的各分量值。
辅助数组内各分量值:
Closedge、
2
3
4
5
6
7
8
U
V.-U
adjvexLowcost
37.下图所示是一带权有向图的邻接表法存储表示。
其中出边表中的每个结点均含有三个字段,依次为边的另一个顶点在顶点表中的序号、边上的权值和指向下一个边结点的指针。
试求:
(1).该带权有向图的图形;
(2).从顶点V1为起点的广度优先周游的顶点序列及对应的生成树(即支撑树);
(3).以顶点V1为起点的深度优先周游生成树;
(4).由顶点V1到顶点V3的最短路径。
(顶点边)(出边表)
1
V1
―►
33
—►
29
25
A
V2
36
V3
V4
30
f
38
42
V5
10
r
18
V6
38.对于如下的加权有向图,给出算法A为源点,并写出生成过程。
39.已知图的邻接矩阵为:
V7
V8
V9V10
V9
V10
当用邻接表作为图的存储结构,
且邻接表都按序
口
号
'
从大到小排序时,试写出:
(1).以顶点V1为出发点的唯一的深度优先遍历;
(2).以顶点V1为出发点的唯一的广度优先遍历;
(3).该图唯一的拓扑有序序列。
40.对图示的AOE网络,计算各活动弧的e(ai)和1佝)的函数值,各事件(顶点)的ve(Vj)和vl(Vj)的函数值,列出各条关键路径。
41.设有向G图有n个点(用1,2,…,n表示),e条边,写一算法根据其邻接表生成其反向邻接表,要求算法复杂性为O(n+e)。
voidlnvertAdjList(AdjListgin,gout)
//将有向图的出度邻接表改为按入度建立的逆邻接表
{for(i=1;
iv=n;
i++)〃设有向图有n个顶点,建逆邻接表的顶点向量。
{gin[i].vertex=gout[i].vertex;
gin.firstarc=null;
}
for(i=1;
i++)//邻接表转为逆邻接表。
{p=gout[i].firstarc;
〃取指向邻接表的指针。
while(p!
=null)
{j=p->
adjvex;
s=(ArcNode*)malloc(sizeof(ArcNode));
/申请结点空间。
s->
adjvex=i;
next=gin[j].firstarc;
gin[j].firstarc=s;
p=p->
next;
〃下一个邻接点。
}//while
}//for}
42.写出从图的邻接表表示转换成邻接矩阵表示的算法。
voidAdjListToAdjMatrix(AdjListgl,AdjMatrixgm)
〃将图的邻接表表示转换为邻接矩阵表示。
i++)〃设图有n个顶点,邻接矩阵初始化。
for(j=1;
jv=n;
j++)gm[i][j]=0;
i++)
{p=gl[i].firstarc;
〃取第一个邻接点。
=null){gm[i][p->
adjvex]=1;
p=p->
}//下一个邻接点}//for}//算法结束
43.设已给出图的邻接矩阵,要求将邻接矩阵转换为邻接表。
voidAdjMatrixToAdjList(AdjMatrixgm,AdjListgl)//将图的邻接矩阵表示法转换为邻接表表示法。
i<
=n;
i++)//邻接表表头向量初始化。
{scanf(&
gl[i].vertex);
gl[i].firstarc=null;
}
j<
j++)
if(gm[i][j]==1){p=(ArcNode*)malloc(sizeof(ArcNode));
//申请结点空间。
p->
adjvex=j;
//顶点I的邻接点是jp->
next=gl[i].firstarc;
gl[i].firstarc=p;
//链入顶点i的邻接点链表中}
}//end
[算法讨论]算法中邻接表中顶点在向量表中的下标与其在邻接矩阵中的行号相同。
44•假设有向图以邻接表存储,试编写算法删除弧vVi,Vj>
的算法。
voidDeleteArc(AdjListg,vertypevi,vj)
〃删除以邻接表存储的有向图g的一条弧<
vi,vj>
,假定顶点vi和vj存在{i=GraphLocateVertex(g,vi);
j=GraphLocateVertex(g,vj);
//顶点定位p=g[i].firstarc;
pre=null;
while(p)
if(p->
adjvex==j)
{if(pre==null)g[i].firstarc=p->
elsepre->
next=p->
free(p);
}〃释放结点空间。
else{pre=p;
}//结束
45.已知无向图采用邻接表存储方式,试写出删除边(i,j)的算法。
voidDeletEdge(AdjListg,inti,j)
〃在用邻接表方式存储的无向图g中,删除边(i,j)
{p=g[i].firstarc;
//删顶点i的边结点(i,j),pre是前驱指针while(p)
adjvex==j){if(pre==null)g[i].firstarc=p->
}//释放结点空间。
else{pre=p;
}//沿链表继续查找
p=g[j].firstarc;
//删顶点j的边结点(j,i)while(p)
adjvex==i)
{if(pre==null)g[j].firstarc=p->
}//DeletEdge
[算法讨论]算法中假定给的i,j均存在,否则应检查其合法性。
若未给顶点编号,而给出顶点信息,贝U先用顶点定位函数求出其在邻接表顶点向量中的下标i和j
46.设有向图用邻接表表示,图有n个顶点,表示为1至n,试写一个算法求顶点k的入度(1<
kvn)。
[题目分析]在有向图的邻接表中,求顶点的出度容易,只要简单在该顶点的邻接点链表中查结点个数即可。
而求顶点的入度,贝要遍历整个邻接表。
intcount(AdjListg,intk)
〃在n个顶点以邻接表表示的有向图g中,求指定顶点k(1<
=kv=n)的入度。
{intcount=0;
i++)//求顶点k的入度要遍历整个邻接表
if(i!
=k)//顶点k的邻接链表不必计算
{P=g[i]・firstarc;
〃取顶点i的邻接表。
{if(P->
adjvex==k)count++;
P=P->
}//ifreturn(count);
//顶点k的入度.
47.写出图的深度优先搜索DFS算法的非递归算法。
voidTraver(AdjListg,vertyPev)
//图g以邻接表为存储结构,算法从顶点v开始实现非递归深度优先遍历。
{structarc*stack[];
visited[v]=1;
Printf(v);
//输出顶点vtoP=0;
P=g[v].firstarc;
stack[++toP]=P;
while(toP>
0||P!
{while(P)
if(P&
visited[P->
adjvex])P=P->
else{Printf(P->
adjvex);
stack[++toP]=P;
P=g[P->
adjvex].firstarc;
}//else
if(toP>
0){P=stack[toP--];
P=P->
}//while}//算法结束。
[算法讨论]以上算法适合连通图,若是非连通图,贝再增加一个主调算法,其核心
语句是for(vi=1;
viv=n;
vi++)
if(!
visited[vi])Traver(g,vi);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 第七 习题