- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图以及最小生成树和最短路径概要1
v5 v1 v2 v3 v4 v6 v7 v8 v9 4 6 5 1 1 2 9 7 4 4 2 6 4 0 5 7 7 16 14 18 18 14 9 8 6 6 16 7 0 活动 1-2 1-3 1-4 2-5 3-5 4-6 5-7 5-8 6-8 7-9 8-9 e 0 0 0 6 4 5 7 7 7 16 14 l 0 2 3 6 6 8 7 7 9 16 14 e-l 0 2 3 0 2 3 0 0 3 0 0 v5 v1 v2 v7 v8 v9 6 1 9 7 4 2 6 0 7 16 14 18 18 14 6 16 7 0 说明: 1、并不是加快任何一个关键活动都可以缩短整个工程的工期。只有加快那些包括在所有关键路径上的关键活动才能达到这个目的。 2、关键活动的速度提高是有限度的 1.熟悉图的各种存储结构及其构造算法,了解实际问题的求解效率与采用何种存储结构和算法有密切联系。 2. 熟练掌握图的两种搜索路径的遍历:遍历的逻辑定义、深度优先搜索的两种形式(递归和非递归)和广度优先搜索的算法。 3. 应用图的遍历算法求解各种简单路径问题。 4. 理解教科书中讨论的各种图的应用算法。 学习要点 * * E B F C D A 8 18 2 30 15 9 7 4 5 DIJKSTRA算法实现 * TestShortestPath TestShortestPath DIJKSTRA算法实现 * DIJKSTRA算法实现 * DIJKSTRA算法实现 * DIJKSTRA算法实现 * DIJKSTRA算法实现 * DIJKSTRA算法实现 * 练习:v0 两种方法: 调用n次Dijkstra算法求解 Floyd算法 9.6.2. 每一对顶点对之间的最短路径 弗洛伊德算法是:设矩阵cost用来存放带权有向图G的权值,即矩阵元素cost[i][j]中存放着下标为i的结点到下标为j的结点之间的权值,可以通过递推构造一个矩阵序列A0, A1, A2, …, AN来求每对结点之间的最短路径。初始时有,A0[i][j] = cost[i][j]。当已经求出Ak,要递推求解Ak+1时,可分两种情况来考虑:一种情况是该路径不经过下标为k+1的结点,此时该路径长度与从结点vi到结点vj的路径上所经过的结点下标不大于k的最短路径长度相同;另一种情况是该路径经过下标为k+1的结点,此时该路径可分为两段,一段是从结点vi到结点vk+1的最短路径,另一段是从结点vk+1到结点vj的最短路径,此时的最短路径长度等于这两段最短路径长度之和。这两种情况中的路径长度较小者,就是要求的从结点vi到结点vj的路径上所经过的结点下标不大于k+1的最短路径长度。 弗洛伊德算法的算法思想可用如下递推公式描述: A0[i][j]=cost[i][j] Ak+1[i][j]=min{Ak[i][j], Ak[i][k+1]+Ak[k+1][j]}(0≤k≤n-1) 也就是说,初始时,A0[i][j]=cost[i][j],然后进行递推,每递推一次,从结点vi到结点vj的最短路径上就多考虑了一个经过的中间结点,这样,经过n次递推后得到的An[i][j]就是考虑了经过图中所有结点情况下的从结点vi到结点vj的最短路径长度。 例如: 有向图的最短路径及其路径长度 带权有向图 (a)有向图 (b)邻接矩阵 9.7 AOV网与拓扑排序 一般都把工程分为若干个叫做“活动”的子工程。完成了这些活动,这个工程就可以完成了。 例如,计算机专业学生的学习就是一个工程,每一门课程的学习就是整个工程的一些活动。其中有些课程要求先修课程,有些则不要求。这样在有的课程之间有先后关系,有的课程可以并行地学习。 C1 高等数学 C2 程序设计基础 C3 离散数学 C1, C2 C4 数据结构 C3, C2 C5 高级语言程序设计 C2 C6 编译方法 C5, C4 C7 操作系统 C4, C9 C8 普通物理
文档评论(0)