第八章 图 数据结构(用面向对象的基本方法与C 语言描述)(第2版)课件.ppt

第八章 图 数据结构(用面向对象的基本方法与C 语言描述)(第2版)课件.ppt

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

Dijkstra算法可描述如下: ① 初始化: S?{v0}; dist[j]?Edge[0][j], j = 1, 2, …, n-1; // n为图中顶点个数 ② 求出最短路径的长度: dist[k]?min {dist[i]}, i?V-S ; S?S∪{k}; ③ 修改: dist[i]?min{dist[i], dist[k]+Edge[k][i]}, 对于每一个 i?V-S ; ④ 判断:若 S = V, 则算法结束,否则转②。 计算从单个顶点到其他各顶点 最短路径的算法 void ShortestPath (GraphT, E G, T v, E dist[], int path[]) { //Graph是一个带权有向图。dist[j], 0≤jn, 是当前 //求到的从顶点v到顶点j的最短路径长度, path[j], //0≤jn, 存放求到的最短路径。 int n = G.NumberOfVertices(); bool *S = new bool[n]; //最短路径顶点集 int i, j, k; E w, min; for (i = 0; i n; i++) { dist[i] = G.getWeight(v, i); S[i] = false; if (i != v dist[i] maxValue) path[i] = v; else path[i] = -1; } S[v] = true; dist[v] = 0; //顶点v加入顶点集合 for (i = 0; i n-1; i++) { //求解各顶点最短路径 min = maxValue; int u = v; //选不在S中具有最短路径的顶点u for (j = 0; j n; j++) if (!S[j] dist[j] min) { u = j; min = dist[j];} S[u] = true; //将顶点u加入集合S for (k = 0; k n; k++) { //修改 w = G.GetWeight(u, k); if (!S[k] w maxValue dist[u]+w dist[k]) { //顶点k未加入S dist[k] = dist[u]+w; path[k] = u; //修改到k的最短路径 } } } }; Dijkstra算法中各辅助数组的最终结果 从表中读取源点0到终点v的最短路径的方法 : 举顶点4为例 path[4] = 2 path[2] = 3 path[3] = 0,反过来排列,得到路径 0, 3, 2, 4,这就是源点0到终点4的最短路径。 0 4 1 2 3 10 50 10 20 60 30 100 序号 顶点 1 顶点 2 顶点 3 顶点 4 Dist 10 50 30 60 path 0 3 0 2 边上权值为任意值的单源最短路径问题 带权有向图D的某几条边或所有边的长度可能为负值。利用Dijkstra算法,不一定能得到正确的结果。 若设源点v = 0,使用Dijkstra算法所得结果 0 1 2 5 7 -5 源点0到终点2的最短路径应是0, 1, 2,其长度为2,它小于算法中计算出来的dist[2]的值。 Bellman和Ford提出了从源点逐次绕过其他顶点,以缩短到达终点的最短路径长度的方法。该方法有一个限制条件,即要求图中不能包含有由带负权值的边组成的回路。 5 7 -5 0 1 2 1 1 -2 0 1 2 当图中没有由带负权值的边组成的回路时,有n 个顶点的图中任意两个顶点之间如果存在最短路径,此路径最多有n-1条边。 我们将以此为依据考虑计算从源点v到

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档