数据结构chapter图的应用:最短路径问题,关键路径.pptVIP

数据结构chapter图的应用:最短路径问题,关键路径.ppt

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 首先,我们可以发现有这样一个事实:如果P是G中从vs到vj的最短路,vi是P中的一个点,那么,从vs沿P到vi的路是从vs到vi的最短路。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。 一种用永久和临时标号方式,一种是用OPEN, CLOSE表方式,Drew为了和下面要介绍的 A* 算法和 D* 算法表述一致,这里均采用OPEN,CLOSE表的方式。   其采用的是贪心法的算法策略   大概过程:   创建两个表,OPEN, CLOSE。   OPEN表保存所有已生成而未考察的节点,CLOSED表中记录已访问过的节点。   1. 访问路网中距离起始点最近且没有被检查过的点,把这个点放入OPEN组中等待检查。   2. 从OPEN表中找出距起始点最近的点,找出这个点的所有子节点,把这个点放到CLOSE表中。   3. 遍历考察这个点的子节点。求出这些子节点距起始点的距离值,放子节点到OPEN表中。   4. 重复第2和第3步,直到OPEN表为空,或找到目标点。 * Dijkstra算法的具体做法: 一开始第一组S只包括顶点v0,第二组包括其它所有顶点; v0对应的距离值为0,而第二组的顶点对应的距离值这样确定: 若图中有边v0,Vi或者(v0,Vi),则Vi的距离值为此边所带的权,否则Vi的距离值为∞。 然后,每次从第二组的顶点中选一个其距离值为最小的顶点Vu加入到第一组中; 每往第一组加入一个顶点Vu,就要对第二组的各顶点的距离值进行一次修正: 若加进Vm做中间顶点,使从s到Vi的最短路径比不加Vm的为短,则需要修改Vi的距离值。 修改后再选距离值最小的顶点加入到第一组中,如此进行下去,直到图的所有顶点都包括在第一组中或者再也没有可加入到第一组的顶点存在。 * E=n(n-1)/2 * Floyd-Warshall 算法用来找出每对点之间的最短距离。它需要用邻接矩阵来储存边,这个算法通过考虑最佳子路径来得到最佳路径。   注意单独一条边的路径不一定是最佳路径。   从任意一条单边路径开始。所有两点之间的距离是边的权,或者无穷大,如果两点之间没有边相连。   对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到 w 再到 v 比己知的路径更短。如果是更新它。   不可思议的是,只要安排适当,就能得到结果。 即使问题是求单源最短路径,还是推荐使用这个算法,如果时间和空间允许(只要有放的下邻接矩阵的空间,时间上就没问题)。 * void Floyd(AdjMGraph G,int *distance,int *path) { int i,j,k,n=G.Vertices.size; for (i=0;in;i++)//初始化 for(j=0;jn;j++) { distance[i][j]=G.edge[i][j]; if(distance[i][j] MaxWeight) path[i][j] = i; else path[i][j] = -1; } for(k=0;kn;k++) for(i=0;in;i++) for(j=0;jn;j++) if(distance[i][j]distance [i][k]+distance [k][j]) { distance[i][j]=distance [i][k]+distance [k][j]; path[i][j]=k; } } * AOV网与AOE网有密切关系又有不同。如果用他们表示工程,AOV网表示各个子工程之间的优先关系,是定性关系;在AOE网中还要体现完成各个子工程的确切时间,是定量关系。 在AOE网中,只有在某顶点所代表的事件发生后,从该顶点出发的各有向边所代表的活动才能开始。只有在进入每顶点的各有向边所代表的活动都已经结束后,该顶点所代表的事件才能发生。 在一个表示工程的AOE网中,应该不存在回路,网中仅存在一个入度为零的顶点,称作开始顶点,它表示了整个工程的开始;网中仅存在一个出度为零的顶点,称为结束顶点,它表示整个工程的结束。 由于AOE网中某些子工程(活动)可以同时进行,要保证每个子工程都能完成,完成该工程的最少时间就是该工程AOE网的关键路径长度。 4.活动的最早开始时间 活动aj的最早开始时间e (j)是该活动的起点所表示的事件最早发生时间,如果由边(vi,vk)表示活动aj,则有e(j)=ve(i)。 5.事件的最迟发生时间 事件vk的最迟发生时间

文档评论(0)

panguoxiang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档