- 1、本文档共48页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
拓扑排序和最短路径
拓扑排序 拓扑排序 拓扑排序 拓扑排序 单源点的最短路径 Dijkstra算法 Dijkstra算法 Dijkstra算法 Dijkstra算法 Dijkstra算法 Dijkstra算法 Dijkstra算法 Dijkstra算法 Dijkstra算法实现 Dijkstra算法实现 Dijkstra算法实现 路径的形式一定为: V0-Vi1-Vi2…-Vip-Vk Vi1,Vi2 ……,Vip ∈ S V0到Vk的最短路径是V0到Vip的最短路径 + Vip到Vk的边 Dijkstra算法-证明 如何找到Vk? min( D[i] + dur(i,k)) i = 0,1,…k-1 Vk?S Dijkstra算法-证明 为了减少计算量,改变一下计算次序 初始时: D[k] = 源点到顶点k 的弧上的权值 当S = S ∪{Vj},修改 D[K] = min(D[k], D[Vj] + Vj, K) Dijkstra算法-证明 templateclass T void AdjacencyWDigraphT::ShortestPaths(int s, T d[], int p[]) {// Shortest paths from vertex s, return shortest // distances in d and predecessor info in p. if (s 1 || s n) throw OutOfBounds(); Chainint L; // list of reachable vertices for // which paths have yet to be found ChainIteratorint I; // initialize d, p, and L for (int i = 1; i = n; i++){ d[i] = a[s][i]; if (d[i] == NoEdge) p[i] = 0; else {p[i] = s; L.Insert(0,i);} } // update d and p while (!L.IsEmpty()) {// more paths exist // find vertex *v in L with least d int *v = I.Initialize(L); int *w = I.Next(); while (w) { if (d[*w] d[*v]) v = w; w = I.Next();} // next shortest path is to vertex *v // delete from L and update d int i = *v; L.Delete(*v); for (int j = 1; j = n; j++) { if (a[i][j] != NoEdge (!p[j] || d[j] d[i] + a[i][j])) { // d[j] decreases d[j] = d[i] + a[i][j]; // add j to L if not already in L if (!p[j]) L.Insert(0,j); p[j] = i;} } } } 2、权值要为正数,否则,得不到正确结果 1、算法的总的时间复杂度:O(n2) 3、当权值出现负数时,要使用Bellman-Flord算法 每一对顶点之间的最短路径 v0 v2 v1 3 2 6 4 11 c a b 问题:给定一个图G,求出G中任意两个顶点之间的最短路径(距离和经过的顶点) 解决方法: 对图中的每个结点V,以V为源点,调用Dijkstra算法 时间复杂度为O(n3) 显然,顶点vi和vj之间的最短路径通过了n个顶点的某些顶点。 Floyd 算法 首先对顶点进行编号,n个顶点对应1……n个整数,分别叫做V1,V2,……,Vn 一、定义 由集合上的一个偏序关系得到集合的全序关系的操作 偏序:自反的、反对称的、传递的 全序:R是集合X上的偏序,对于集合X中的任何元素x,y,如果都
您可能关注的文档
- 市场福利.ppt
- 常用编码.pptx
- 常微分424.ppt
- 幂级数性质.ppt
- 平方根().ppt
- 平方根(浙教版).ppt
- 山东省安全生产培训考核管理系统(监管部门用户审批管理、发证管理、试卷查询操作介绍).ppt
- 工程力学静力学第三单元平面一般力系.ppt
- 平移(新人.ppt
- 幂级数与Taylor级数小结.ppt
- springbooot+vue基于java的房屋维修系统毕业论文.doc
- 中国消防救援学院《单片机系统实验》2023-2024学年第一学期期末试卷.doc
- 2025年溧阳纺织化学品项目申请.pptx
- 景区门票包销合同模板(3篇).docx
- 【股票技术指标学习指南】第七章第三节货币需要量的测算.doc
- 2025春 _ 人教版七年级英语下册【unit4】看音标写单词.doc
- 2025春 _ 人教版七年级英语下册【unit5】看音标写单词.doc
- 2025春 _ 人教版七年级英语下册【unit6】看音标写单词.doc
- 2025春 _ 人教版七年级英语下册【unit7】看音标写单词.doc
- 2025春 _ 人教版七年级英语下册【unit8】看音标写单词.doc
文档评论(0)