数据结构最短路径剖析.ppt

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构最短路径剖析

数据结构(C++版) 清华大学出版社 专题3:最短路径 1 2 3 最短路径的定义 Dijkstra算法 Floyd算法 在非网图中,最短路径是指两顶点之间经历的边数最少的路径。 6.4 最短路径 最短路径 B A E D C AE:1 ADE:2 ADCE:3 ABCE:3 最短路径 在网图中,最短路径是指两顶点之间经历的边上权值之和最短的路径。 B A E D C 10 50 30 10 100 20 60 AE:100 ADE:90 ADCE:60 ABCE:70 6.4 最短路径 问题描述:给定带权有向图G=(V, E)和源点v∈V,求从v到G中其余各顶点的最短路径。 单源点最短路径问题 应用实例——计算机网络传输的问题:怎样找到一种最经济的方式,从一台计算机向网上所有其它计算机发送一条消息。 迪杰斯特拉(Dijkstra)提出了一个按路径长度递增的次序产生最短路径的算法——Dijkstra算法。 6.4 最短路径 基本思想:设置一个集合S存放已经找到最短路径的顶点,S的初始状态只包含源点v,对vi∈V-S,假设从源点v到vi的有向边为最短路径。以后每求得一条最短路径v, …, vk,就将vk加入集合S中,并将路径v, …, vk , vi与原来的假设相比较,取路径长度较小者为最短路径。重复上述过程,直到集合V中全部顶点加入到集合S中。 Dijkstra算法 6.4 最短路径 集 合 V-S 集 合 S vk v vi Dijkstra算法——伪代码 6.4 最短路径 设源点v,wv, vj表示从顶点v到顶点vj的权值,dist(v, vj)表示从顶点v到顶点vj的最短路径长度,Dijkstra算法的基本思想用伪代码描述如下: 1. 初始化:集合S = {v};dist(v, vj) = wv, vj, (j=1..n); 2. 重复下述操作直到S == V 2.1 dist(v, vk) = min{dist(v, vj), (j=1..n)}; 2.2 S = S + {vk}; 2.3 dist(v, vj)=min{dist(v, vj), dist(v, vk) + wvk, vj}; A B A E D C 10 50 30 10 100 20 60 S={A} A→B:(A, B)10 A→C:(A, C)∞ A→D: (A, D)30 A→E: (A, E)100 Dijkstra算法 6.4 最短路径 A B A E D C 10 50 30 10 100 20 60 S={A, B} A→B:(A, B)10 A→C:(A, B, C)60 A→D: (A, D)30 A→E: (A, E)100 B Dijkstra算法 6.4 最短路径 A B A E D C 10 50 30 10 100 20 60 S={A, B, D} A→B:(A, B)10 A→C:(A, D, C)50 A→D: (A, D)30 A→E: (A, D, E)90 B D Dijkstra算法 6.4 最短路径 A B A E D C 10 50 30 10 100 20 60 S={A, B, D, C} A→B:(A, B)10 A→C:(A, D, C)50 A→D: (A, D)30 A→E: (A, D, C, E)60 B D C Dijkstra算法 6.4 最短路径 A B A E D C 10 50 30 10 100 20 60 Dijkstra算法 S={A, B, D, C, E} A→B:(A, B)10 A→C:(A, D, C)50 A→D: (A, D)30 A→E: (A, D, C, E)60 B D C E 6.4 最短路径 图的存储结构:带权的邻接矩阵存储结构 数组dist[n]:每个分量dist[i]表示当前所找到的从始点v到终点vi的最短路径的长度。初态为:若从v到vi有弧,则dist[i]为弧上权值;否则置dist[i]为∞。 数组s[n]:存放源点和已经生成的终点,其初态为只有一个源点v。 数据结构 : 6.4 最短路径 1. 初始化数组dist和s; 2. while (s中的元素个数n) 2.1 在dist[n]中求最小值,其下标为k; 2.2 输出dist[k]; 2.3 修改数组dist; 2.4 将顶点vk添加到数组s中; Dijkstra算法——伪代码 6.4 最短路径 Dijkstra算法——伪代码 6.4 最短路径 A B E D C 10 5

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档