好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

武汉纺织大学数据结构实验报告3.doc

23页
  • 卖家[上传人]:大米
  • 文档编号:533569546
  • 上传时间:2023-02-01
  • 文档格式:DOC
  • 文档大小:459KB
  • / 23 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 武汉纺织大学《数据结构》实验报告班级: 管工类 专业 班 姓名: 序号: 实验时间: 2014 年 5 月 16 日 指导教师: 实验三:图的基本操作与应用一、实验目的: 1、掌握图的几种主要存储方法及基本操作2、掌握图的两种遍历方法3、掌握利用普里姆算法和克鲁斯卡尔算法求取最小生成树的方法4、掌握求取AOE网关键路径的方法,以实现项目时间管理二、实验内容:1、编写程序,输出图的邻接矩阵,输出两种遍历序列,并求出最小生成树 实验步骤: ①、在Java语言编辑环境中新建程序,输入顶点集合和边集合,构造一个图7-15所示的带权图,可参考书本225页示例程序; ②、对该带权图,进行插入顶点、插入边、删除顶点、删除边操作,并输出操作后的邻接矩阵,可参考书本226-228页示例程序; ③、输出从顶点'A'开始的深度优先遍历和广度优先遍历的序列,可参考书本238、240页示例程序; ④、输出运用普里姆算法求出的最小生成树,可参考书本245页示例程序2、设计一个程序求出完成整项工程至少需要多少时间以及整项工程中的关键活动。

      实验步骤: ①、在Java语言编辑环境中新建程序,输入如下图所示的AOE网; ②、按照关键路径求取步骤,求出各个顶点的最早开始时间和最迟开始时间; ③、求出各个活动的最早开始时间和最迟开始时间; ④、找出该AOE网的关键路径,并计算出该项目的完成时间关键路径相关时间知识点: 设活动ai由弧(即从顶点j到k)表示,其持续时间记为dut(),则: e(i)=ve(j) l(i)=vl(k)-dut()求ve(i)和vl(j)分两步: (1).从ve(1)=0开始向前递推ve(j)=Max{ve(i)+dut()}∈T, 2<=j<=n ,其中,T是所有以j为弧头的弧的集合2).从vl(n)=ve(n)开始向后递推vl(i)=Min{vl(j)-dut()} ∈S,1<=i<=n-1,其中,S是所有以i为弧尾的弧的集合求关键路径的算法: ①、输入e条弧,建立AOE网的存储结构; ②、从起始点出发,令ve[0]=0,按拓扑顺序求其余各顶点的最早发生时间ve[i](1<=i<=n-1)。

      如果得到的拓扑有序序列中顶点个数小于网中顶点数n,则说明网中存在环,不能求关键路径,算法终止,否则转到步骤③; ③、从终结点vn出发,令vl[n-1]=ve[n-1],按逆拓扑顺序求其余各顶点的最迟发生时间vl[i](n-2>=i>=0); ④、根据各顶点的ve和vl值,求每条弧s的最早开始时间e(s)和最迟开始时间l(s)若某弧满足条件e(s)=l(s),则为关键活动三、操作步骤:Test1代码:Graph1.javapackage Frist;public class Graph1 { public static void main(String[] args) { String[] vertices = { "A", "B", "C", "D", "E" }; Edge edges[] = { new Edge(0, 1, 5), new Edge(0, 3, 2), new Edge(1, 0, 5), new Edge(1, 2, 7), new Edge(1, 3, 6), new Edge(2, 1, 7), new Edge(2, 3, 8), new Edge(2, 4, 3), new Edge(3, 0, 2), new Edge(3, 1, 6), new Edge(3, 2, 8), new Edge(3, 4, 9), new Edge(4, 2, 3), new Edge(4, 3, 9) }; AdjMatrixGraph graph = new AdjMatrixGraph(vertices, edges); System.out.println("带权无向图," + graph.toString()); System.out.println("插入顶点F,插入边(A,F,20),删除顶点C,删除边(D,E)"); int i = graph.insertVertex("F"); graph.insertEdge(0, i, 20); graph.insertEdge(i, 0, 20); graph.removeVertex(2); graph.removeEdge(2, 3); graph.removeEdge(3, 2); System.out.println(graph.toString()); AdjMatrixGraph graph1 = new AdjMatrixGraph(vertices, edges); System.out.print("深度优先遍历序列为:"); graph1.DFSTraverse(0); System.out.print("广度优先遍历序列为:"); graph1.BFSTraverse(0); AdjMatrixGraph graph2 = new AdjMatrixGraph(vertices, edges); System.out.print("带权无向图," + graph2.toString()); graph2.minSpanTree_prim(); }}LList.javapackage Frist;public interface LList { boolean isEmpty(); int length(); T get(int i); void set(int i, T x); void insert(int i, T x); T remove(int i); void removeAll();}ueue.javapackage Frist;public interface ueue { boolean isEmpty(); void enqueue(T x); T dequeue();}SeqList.javapackage Frist;public class SeqList implements LList { private Object[] element; private int len; public SeqList(int size) { this.element = new Object[size]; this.len = 0; } public SeqList() { this(64); } public boolean isEmpty() { return this.len == 0; } public int length() { return this.len; } public T get(int i) { if (i >= 0 && i < this.len) return (T) this.element[i]; return null; } public void set(int i, T x) { if (x == null) return; if (i >= 0 && i < this.len) this.element[i] = x; else throw new IndexOutOfBoundsException(i + ""); } public String toString() { String str = "("; if (this.len > 0) str += this.element[0].toString(); for (int i = 1; i < this.len; i++) str += "," + this.element[i].toString(); return str + ")"; } public void insert(int i, T x) { if (x == null) return; if (this.len == element.length) { Object[] temp = this.element; this.element = new Object[temp.length * 2]; for (int j = 0; j < temp.length; i++) this.element[i] = temp[j]; } if (i < 0) i = 0; if (i > this.len) i = this.len; for (int j = this.len - 1; j >= i; j--) this.element[j + 1] = this.element[j]; this.element[i] = x; this.len++; } public void append(T x) { insert(this.len, x); } public T remove(int i) { if (this.len == 0 || i < 0 || i >= this.len) return null; T old = (T) this.element[i]; for (int j = i; j < this.len - 1; j++) this.element[j] = this.element[j + 1]; this.element[this.len - 1] = null; this.len--; return old; } public void removeAll() { this.len = 0; }}SeqQueue.javapackage Frist;public class SeqQueue implements ueue { private Object element[]; private int front, rear; public SeqQueue(int length) { if (length < 64) length = 64; this.element = new Object[Math.abs(length)]; this.front = this.rear = 0; } public SeqQueue() { this(64); } public boolean isEmpty() { return this.front == this.rear。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.