资源描述:
《武汉纺织大学《数据结构》实验报告3》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、武汉纺织大学《数据结构》实验报告班级:管工类专业班姓名:序号:实验时间:2014年5月16日指导教师:实验三:图的基本操作与应用一、实验目的:1、掌握图的几种主要存储方法及基本操作2、掌握图的两种遍历方法3、掌握利用普里姆算法和克鲁斯卡尔算法求取最小生成树的方法4、掌握求取AOE网关键路径的方法,以实现项目时间管理二、实验内容:1、编写程序,输出图的邻接矩阵,输出两种遍历序列,并求出最小生成树。实验步骤:①、在Java语言编辑环境中新建程序,输入顶点集合和边集合,构造一个图7・15所示的带权图,可参考书本225页示例程序;②、对该带权
2、图,进行插入顶点、插入边、删除顶点、删除边操作,并输岀操作后的邻接矩阵,可参考书本226-228页示例程序;③、输岀从顶点'A'开始的深度优先遍历和广度优先遍历的序列,可参考书木238、240页示例程序;④、输出运用普里姆算法求出的最小生成树,可参考书本245页示例程序。2、设计一个程序求岀完成整项工程至少需要多少时间以及整项工程中的关键活动。实验步骤:①、在Jewel语言编辑环境屮新建程序,输入如下图所示的AOE网;②、按照关键路径求取步骤,求出各个顶点的最早开始时间和最迟开始时间;③、求出各个活动的最早开始时间和最迟开始时间;④、
3、找岀该A0E网的关键路径,并计算岀该项目的完成吋间。关键路径相关吋I可知识点:设活动ai由弧(即从顶点j到k)表示,其持续时间记为dut«j,k»,则:e(i)=ve(j)1(i)=vl(k)-dut«j,k»求ve(i)和vl(j)分两步:(1)•从ve(l)=O开始向前递推ve(j)=Max{ve(i)+dut«i,j»}^T,2<=j<=n,其中,T是所有以j为弧头的弧的集合。(2)•从vl(n)=ve(n)开始向后递推vl(i)=Min{vl(j)-dut«i,j»}^S,l<=i<=n-l,其中
4、,S是所有以i为弧尾的弧的集合。求关键路径的算法:①、输入e条弧,建立AOE网的存储结构;②、从起始点出发,令ve[O]=O,按拓扑顺序求其余各顶点的最早发生时间ve[i](lv=iv=ml)。如果得到的拓扑有序序列中顶点个数小于网中顶点数n,则说明网中存在环,不能求关键路径,算法终止,否则转到步骤③;③、从终结点vn出发,令vl[n・l]=ve[n・l],按逆拓扑顺序求其余各顶点的最迟发生时间vl[i](n-2>=i>=0);④、根据各顶点的ve和vl值,求每条弧s的最早开始时间玖s)和最迟开始时间l(s)。若某弧满足条件
5、e(s)=l(s),则为关键活动。三、操作步骤:Testi代码:Graphl.javapackageFrist;publicclassGraphl{publicstaticvoidmain(String[]args){String[]vertices={“A”,HBHCHD”E”};Edgeedges[]={newEdge(0>1,5),newEdge(0,3,2),newEdge(lj0,5),newEdge(l^2,7),newEdge(l^3,6),7),newEdge(2,3,8),newEdge(2,4,3),2),n
6、ewEdge⑶1,6),newEdge⑶2,8),9),newEdge(4,2,3),newEdge(4,3,9)};graph=newAdjMatrixGraph(vertices^newEdge(2,newEdge(3J0,newEdge(3J4,AdjMatrixGraphedges);System.out.printIn("带权无向图+graph.toString());System.out.printIn(M插入顶点F,插入边(A,F,20),删除顶点C,删除边(D,E)”);inti=gra
7、ph・insertVertex("F");graph•insertEdge(0^i,20);graph•insertEdge(i,0,20);graph•removeVertex(2);graph•removeEdge(2J3);graph•removeEdge(3,2);AdjMatrixGraph(vertices.System.out.printIn(graph.toString());AdjMatrixGraph8、先遍历序列为:graphl.DFSTraverse(O);”);System.out.print("广度优先遍历序列为:graphl.BFSTraverse(O);AdjMatrixGraphgraph2