- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《数据结构(Java版)》 第1章 绪论 第2章 线性表 第3章 串 第4章 栈与队列 第5章 数组和广义表 第6章 树和二叉树 第7章 图 第8章 查找 第9章 排序 7.1.5 生成树 一个连通图的生成树是一个极小连通子图。 极小连通图:在极小连通子图上,删除任一条边子图就不再连通,若再增加一条边,必定构成一个环。 生成树的三要素: ①所有n个顶点;②有n-1条边;③图是连通的。 对非连通图,则称由各个连通分量的生成树的集合为此非连通图的生成森林。 邻接矩阵的特点 1)判断ViVj间是否有边(弧),只需检查A[i][j]的值是否非0。 2)很容易计算顶点的度。 无向图的度:顶点Vi 的度为第i行(或第j列)的非零元素个数。 有向图: 第i行的元素之和是顶点Vi 的出度; 第j列的元素之和是顶点Vj 的入度。 无向图的邻接表的特点: 顶点v的度:等于v对应邻接链表的长度; 判定两顶点v,w 是否邻接:看v对应邻接链表中有无对应的结点; 所有邻接链表结点数的一半为边数; 在G中增减边:要在两个单链表插入、删除结点; 2.以邻接矩阵存储的图的深度优先遍历算法实现 【例7.1】 以邻接矩阵表示的图的深度优先遍历算法测试。 对于无向图G6,程序运行结果如下: 深度优先遍历Depth first search: v1 - v2 - v3 - v4 - v2 - v1 - v4 - v3 - v3 - v2 - v1 - v4 - v4 - v1 - v2 - v3 - 3.以邻接表存储的图的深度优先遍历算法实现 在例7.1的main方法中,增加下列调用语句,可输出图的邻接表: g2.output(); 对于有向图G7,程序运行结果如下: 【例题】用邻接表实现深度优先搜索 例:已知无向图的邻接表如下,写出从顶点8出发的DFS算法的顶点序列。 用队列实现“广度优先搜索”的图示 (1)访问指定的顶点vi ,将vi 作为当前顶点; (2)访问当前顶点的所有未被访问的邻接点,并依次将这些邻接结点作当前顶点; (3)重复步骤(2) 直到图中所有顶点都被访问。 队列的作用:顶点被访问后入队;队头出队访问其邻接点。 2.以邻接矩阵存储的图的广度优先遍历算法实现 对于无向图G6,程序运行结果如下: 广度优先遍历Breadth first search: v1-v2-v4-v3- v2-v1-v3-v4- v3-v2-v4-v1- v4-v1-v2-v3- 3.以邻接表存储的图的广度优先遍历算法实现 对于有向图G7,程序运行的结果如下: 广度优先遍历Breadth first search: v1 -v2-v3-v4- v2 -v3-v4-v1- v3 - v4 -v1-v3-v2- 典型用途: 7.5 最短路径 两种常见的最短路径问题: 一、 单源最短路径—用Dijkstra(迪杰斯特拉)算法 二、所有顶点间的最短路径—用Floyd(弗洛伊德)算法 7.6 关键路径 一、AOE网(activity on edge):是一个有向无环图。 其中:顶点表示事件,弧表示活动,权表示活动持续时间。 AOE网可以解决工程的以下问题: (1)完成整个工程需要多少时间? (2)哪些活动是影响工程进度的关键活动? 二、几个术语 路径长度:路径上各活动持续时间的总和。 即:路径上所有弧的权值之和。(如:V1 ,V2 ,V4 )的路径长度为5 关键路径:从源点到汇点间路径长度最长的路径。(不一定唯一) 事件Vi 的最早发生时间ve(i):从源点到Vi 的最长路径长度。 事件Vj 的最迟发生时间vl( j):是在不推迟整个工期的前提下,该事件最迟必须发生的时间。 活动ai的最早开始时间e(i):等于该活动的弧尾事件Vj 的最早发生时间。即若j, k表示活动ai ,则有e(i)=ve(j) 活动ai 的最迟开始时间l(i):是该活动的弧头事件的最迟发生时间与该活动的持续时间之差。 即l(i)=vl(k) - ai 的持续时间。 关键活动: l(i)=e(i)的活动。 即:最早开始时间=最迟开始时间的活动。(关键路径上的活动) 三、关键路径的算法思想 1.计算各事件最早发生时间 从ve(源点)=0开始利用下面的公式向汇点递推即可算出: ve(k)=Max{ve(i)+dut(i, k)} 其中: i, k∈T, T是所有到达Vk的弧的集合,dut(i,k)表示活动的持续时间。 例如: ve(5)=Max{ve(2)+dut(2,5),ve(3)+dut(3,5)} =Max{
文档评论(0)