ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:48.31KB ,
资源ID:10995306      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10995306.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Java数据结构 图.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Java数据结构 图.docx

1、Java 数据结构 图 Java 数据结构 图 习 题 及答案一 、判断题 1求最小生成树的Prim算法在边较少、结点较多时效率较高。( 对 ) 2图的最小生成树的形状可能不唯一。( 错 ) 3用邻接矩阵法存储一个图时,在不考虑压缩存储的情况下,所占用的存储空间大小只与图中结点个数有关,而与图的边数无关。( 错 )4 邻接表法只用于有向图的存储,邻接矩阵对于有向图和无向图的存储都适用。( 错 )有向图和无向图既可以用邻接矩阵表示又可以用邻接表表示。5 任何有向网络(AOV-网络)拓扑排序的结果是唯一的。( 错 )6 有回路的图不能进行拓扑排序。( 对 )含有向环的找不到拓扑排序。7 存储无向图

2、的邻接矩阵是对称的,故只存储邻接矩阵的下(或上)三角部分即可。( 对 ) 8. 用邻接矩阵A表示图,判定任意两个结点Vi和Vj之间是否有长度为m的路径相连,则只要检查Am的第i行第j列的元素是否为0即可。( 错 )9. 在AOE网中一定只有一条关键路径。( 对 )10. 缩短关键路径上活动的工期一定能够缩短整个工程的工期。( )11. 连通分量是无向图中的极小连通子图。( )12. 强连通分量是有向图中的极大强连通子图。( )二、选择题1 N条边的无向图的邻接表的存储中,边表的个数有( B )。A)N B)2N C)N/2 D)N*N2 N条边的无向图的邻接多重表的存储中,边表的个数有( D

3、)。A)N B)2N C)N/2 D)N*N3 最短 路径的生成算法可用( C )。A)普里姆算法 B)克鲁斯卡尔算法 C)迪杰斯特拉算法 D)哈夫曼算法4 有拓扑排序的图一定是( D )。A)有环图 B)无向图 C)强连通图 D)有向无环图5 图的邻接表如下图所示: vertex firstedgeV0 1 3 V1 0 2 3 1V2 V3 0 1 (选择题5图) V0V1V2V3(1) 从顶点V0出发进行深度优先搜索,经历的结点顺序为( B )。A)V0,V3,V2,V1 B)V0,V1,V2,V3 C)V0,V2,V1,V3 D)V0,V1,V3,V2(2) 从顶点V0出发进行广度优先

4、搜索,经历的结点顺序为( D)。A)V0,V3,V2,V1 B)V0,V1,V2,V3 C)V0,V2,V1,V3 D)V0,V1,V3,V26 设有向图n个顶点和e条边,进行拓扑排序时,总的计算时间为( D )。A)O (nlog2e) B)O (en ) C)O ( elog2n) D)O (n+e)7 对于含有n个顶点e条边的无向连通图,利用Kruskal算法生成最小代价生成树其时间复杂度为( A )。A)O (elog2e) B)O (en ) C)O ( elog2n) D)O (nlog2n)8 关键路径是事件结点网络中( )。A)从源点到汇点的最长路径 B)从源点到汇点的最短路径

5、 C)最长的回路 D)最短的回路9 N个顶点的强连通图至少有(1)条边,这样的有向图的形状是(2)。(1)A)n B)n1 C)n1 D)n(n1)(2)A)无回路 B)有回路 C)环状 D)树状10设G有n个顶点和e条边,进行深度优先搜索的时间复杂度至多为(1)。当G是非孤立顶点的连通图时有2en,故可推得深度优先搜索的时间复杂度为(2)。 (1)A)O (ne) B)O (ne ) C)O ( elog2n) D)O (e) (2)A)O (ne) B)O (ne ) C)O ( elog2n) D)O (e)三、填空题1设无向图G中顶点数为n,则图G最少有_0_条边,最多有_n(n-1)

6、/2_条边。若G为有向图,有n个顶点,则图G最少有_0_条边;最多有_n(n-1)_条边。 2具有n个顶点的无向完全图,边的总数为_n(n-1)/2_条;而在n个顶点的有向完全图中,边的总数为_n(n-1)_条。3 图的邻接矩阵表示法是表示_顶点_之间相邻关系的矩阵。4 一个图的生成树的顶点是图的_顶点。5写出下图所示的所有拓扑序列_v0,v1,v5,v2,v3,v6,v4_。 V3V0V41V2v1V5V6 (填空题5图) 6在如下图所示的网络计划图中关键路径是_,全部计划完成的时间是_。1215 5 3 0 8171411 2 0 7.2 2 4 1613 4.5 6.5 8 (填空题9图

7、)7设G有n个顶点和e条边,进行广度优先搜索的时间复杂度至多为_O (ne )_。当G是非孤立顶点的连通图时有2en,故可推得广度优先搜索的时间复杂度为_O(n*n)_。 8一个连通图的生成树是一个_连通子图,n个顶点的生成树有_条边。 9对于含有n个顶点e条边的无向连通图,利用prim算法生成最小代价生成树其时间复杂度为_O(n*n)_。 10邻接表和十字链表适合于存储_稀疏_图,邻接多重表适合于存储_以边为主的_图。四、简答题1对于如图所示的有向图,试给出(1) 每个顶点的入度和出度; (2) 邻接矩阵; (3) 邻接表; (4) 逆邻接表; (5)强连通分量。 (1) (简答题1图)顶点

8、123456入度221321出度123032(2) 邻接矩阵为R 0 0 0 1 0 0 1 0 1 0 0 0 R= 0 1 0 1 1 1 0 0 0 0 0 0 1 1 0 1 0 0 0 1 0 0 1 0(3) 邻接表 顶点表 出边表V1V2V3V4V5V641212 364524 5 (4)逆邻接表 顶点表 入边表V1V2V3V4V5V655621353362设无向图G如图所示 試给出(1) V4V1该图的邻接矩阵;(2) V6V3该图的邻接表;(3) V0该图的多重邻接表;(4) V5V2从A出发的“深度优先”遍历序列;(5) 从A出发的“广度优先”遍历序列。 (简答题2图)(1

9、)该图的邻接矩阵为R 0 1 1 0 0 0 0 1 0 1 0 0 0 0 1 0 0 1 0 0 0 R= 0 1 1 0 1 1 0 0 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 0 0 1 1 0(2)该图的邻接表顶点表 边表V0V1V2V3V4V5V610013342332665453设有向图G如图所示 试画出图G的十字链表结构,并写出图G的两个拓扑序列。AV5V2V41v1 8 3 5CBV3V6 2 (简答题3图) (简答题4图)写出图G的两个拓扑序列 V1,v3,v2,v6,v5,v4 V1,v2,v3,v6,v5,v44试利用弗洛伊德(R.W.Floyed)

10、算法,求图所示有向图的各对顶点之间的最短路径,并写出在执行算法过程中,所得的最短路径长度矩阵序列和最短路径矩阵序列。5下表列出了某工序之间的优先关系和各工序所需时间,求:工序代号所需时间前序工序工序代号所需时间前序工序ABCDEFG15105081540300无无ABC,DBEHIJKLM1512060153020G,IEIF,IH,J,KL (简答题5表)(1) 画出AOE网;(2) 列出各事件中的最早、最迟发生时间;找出该AOE网中的关键路径,并回答完成该工程需要的最短时间。五、算法设计题1试以邻接矩阵为存储结构实现图的基本操作:InsertVex (G,v)、InsertArc (G,v

11、,w)、DeleteVex (G,v)和DeleteArc (G,v,w)。import java.io.*; /最大边数和顶点数/ “邻接矩阵”类class Graph static int MaxEdges = 50; static int MaxVertices = 10; static double MaxValue=9999.9; /无穷大 /存放顶点的数组 private char VerticesList=new charMaxVertices; /邻接矩阵(存放两个顶点权值) private double Edge=new doubleMaxVerticesMaxVertice

12、s; private int CurrentEdges; /现有边数 private int CurrentVertices; /现有顶点数 /构造函数:建立空的邻接矩阵 public Graph ( ) for ( int i = 0; i MaxVertices; i+ ) for ( int j = 0; j MaxVertices; j+ ) if(i=j) Edgeij = 0; /对角线 else /非对角线上无穷大 Edgeij =MaxValue; CurrentEdges = 0; /现有边数 CurrentVertices = 0; /现有顶点数 /查找指定的顶点的序号 p

13、ublic int FindVertex (char vertex) /在顶点数组里面查找 for(int i=0;i= 0 & i = CurrentVertices-1 ? VerticesListi : ; /取得一条边的权值 public double GetWeight ( int v1, int v2 ) if (v1 CurrentVertices - 1) return -1.0; /用-1表示出错 if (v2 CurrentVertices - 1) return -1.0; return Edgev1v2; /取得第一个邻接点的序号 public int GetFirst

14、Neighbor ( int v ) if (v CurrentVertices - 1) return -1; /用-1表示出错 /邻接矩阵的行号和列号是两个邻接点的序号 for ( int col = 0; col 0 & /自身 Edgevcol MaxValue ) /无穷大 return col; return -1; /无邻接点 /插入一个顶点 public int InsertVertex ( char vertex ) if(IsGraphFull() return -1; /插入失败 /顶点表增加一个元素 VerticesListCurrentVertices=vertex;

15、 /邻接矩阵增加一行一列 for ( int j = 0;j =CurrentVertices;j+ ) EdgeCurrentEdgesj=MaxValue; EdgejCurrentEdges=MaxValue; EdgeCurrentEdgesCurrentEdges=0; CurrentVertices+; return CurrentVertices; /插入位置 /插入一个边 public boolean InsertEdge( int v1, int v2, double weight) if (v1 CurrentVertices - 1) return false; /出错

16、if (v2 CurrentVertices - 1) return false; Edgev1v2=weight; /网,有向边 return true; /删除一个顶点 public boolean RemoveVertex ( int v ) if (v CurrentVertices - 1) return false; /出错 /修改顶点表 for(int i=v+1;i CurrentVertices;i+) VerticesListi-1=VerticesListi; /修改邻接矩阵 int k=0; /累计将要删去的边数 for(int i=0;i 0 & /自身 Edgevi

17、 MaxValue ) /无穷大 k+; /第v行 for(int i=0;i 0 & /自身 Edgeiv MaxValue ) /无穷大 k+; /第v列 /覆盖第v行 int j; for(int i=v+1;i CurrentVertices;i+) for(j=0;j CurrentVertices;j+) Edgei-1j=Edgeij; /覆盖第v列 for(j=v+1;j CurrentVertices;j+) for(int i=0;i CurrentVertices;i+) Edgeij-1=Edgeij; CurrentVertices-; /修改顶点数 CurrentE

18、dges-=k; /修改边数 return true; /删除一个边 public boolean RemoveEdge ( int v1, int v2 ) if (v1 CurrentVertices - 1) return false; /用-1表示出错 if (v2 CurrentVertices - 1) return false; if ( v1=v2) return false; Edgev1v2=MaxValue; /网,无路径 return true; /打印邻接矩阵 public void display() int i,j; System.out.println( 顶点表

19、); for(i=0;iCurrentVertices;i+) System.out.print(VerticesListi+ ); System.out.println(n+ 邻接矩阵); for(i=0;iCurrentVertices;i+) for(j=0;jCurrentVertices;j+) if(Edgeij=MaxValue) System.out.print(+ ); else System.out.print(Edgeij+ ); System.out.println(); /主函数 public static void main(String args) Graph G

20、=new Graph(); /邻接矩阵 /准备有向图(网)数据 char c=A,B,C,D,E,F; /顶点 int v= /弧 0,1,0,3,1,2,2,3,4,5, 1,3,2,4,3,5,4,3,2,5 ; double e=2.3,3.6,6.5,2.5,1.7, 0.8,7.2,9.1,5.2,1.3; /权 /插入顶点 for(int i=0;i6;i+) G.InsertVertex(ci); /插入弧 for(int i=0;i10;i+) G.InsertEdge(vi0,vi1,ei); /打印输出 G.display(); /删除一个顶点 G.RemoveVertex

21、(3); G.display(); /删除一条边 G.RemoveEdge(2,4); G.display(); /main方法结束 /“邻接矩阵”类结束2 试以邻接表为存储结构实现算法设计题1中所列图的基本操作。3试以十字链表为存储结构实现算法设计题1中所列图的基本操作。4试以邻接多重表为存储结构实现算法设计题1中所列图的基本操作。5试写一算法由图的邻接链表存储得到图的十字链表存储。 6写一算法,由依次输入图的顶点数目、边的数目、各顶点的信息和各条边的信息建立无向图的邻接多重表。 7试写一个算法,判别以邻接表方式存储的有向图中是否存在由顶点vi到顶点vj的路径(ij)。假设分别基于下述策略:

22、(1) 图的深度优先搜索;(2) 图的宽度优先搜索。 8试修改Prim算法,使之能在邻接表存储结构上实现求图的最小生成森林,并分析其时间复杂度(森林的存储结构为孩子兄弟链表)。9以邻接表作存储结构实现求从源点到其余各顶点的最短路径的Dijkstra算法。/最短路径的Dijkstra算法/ “邻接矩阵”类class GraphPath static int MaxEdges = 50; static int MaxVertices = 10; static double MaxValue=9999.9; /无穷大 /存放顶点的数组 private char VerticesList=new ch

23、arMaxVertices; /邻接矩阵(存放两个顶点权值) private double Edge=new doubleMaxVerticesMaxVertices; private int CurrentEdges; /现有边数 private int CurrentVertices; /现有顶点数 /存放最短路径上的最后一个经由点 public int path=new intMaxVertices; /存放最短路径的权值 public double dist=new doubleMaxVertices; /构造函数:建立空的邻接矩阵 public GraphPath ( ) for ( int i = 0; i MaxVertices; i+ ) for ( int j = 0; j MaxVertices; j+ ) if(i=j) Edgeij = 0; /对角线 else /非对角线上无穷大 Edgeij =MaxValue; CurrentEdges = 0; /现有边数 CurrentVertices = 0; /现有顶点数 /查找指定的顶点的序号 public int FindVertex (char vertex) /在顶点数组里面查找 for(int i=0;iCurrentVertices;i+)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1