单向最短路径问题.doc

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

课程名称 数据结构 17 授课题目 单向最短路径问题 授课日期 2003 年 12 月 17 日 授课班级 生物医学工程 授课时数 4 授课方式 理论课 授 课 重 点 、 难 点 1. 掌握Dijkstra算法思想 2. 掌握Floyd算法思想 3. 掌握Dijkstra、Floyd程序技巧 4. 了解Prim Kruskal算法 授课内容 、 教具与时间分配 授课内容 、 教具与时间分配 一、以课本p139图5.9加权有向图为例,解释Dijkstra算法思想。 1. 选择源点 ① ; 2. 将 ① 放入集合 S ; 3. 建立数组 dis[v]=cost[1][v] ,是源点① → 到各顶点(v)的距离; 4. 在数集 V-S 中,选择 dis[v] 值最小的顶点 (W),现为②,放入S,S={1,2} ; 5. 借道(W) ,调正①→(v)各顶点的距离 dis[v]: 原有: ① ----?(v) 距离 比较 二者中取较小值 借道(W): ①?(W)?(v) 距离 邻接矩阵 即: dis[v]=min{原dis[v],dis[w]+dis[w][v]} 6. 在V-S中,取dis[v]最小的顶点(w),现为④,放入S,S={1,2,4} 7. 再回到5.,循环操作,直至每个顶点进入S 。在dis[v]中即表示了原点到各顶点的最短带权路径。 课本 P139图5.9一共有n个顶点,操作n-1次(实际上第1点,最后一点,不作运算)。 Dijkstra 算法是最短路径长(弧的条数)不减原则,即弧条数只增加,不减少; 或称为权长不增原则,即权只减少,不增加。 二、解释课本p140程序 dijkstra.c 1. 调用函数adjmatrix(cost),生成邻接矩阵cost[][],返回顶点个数n ; 2. 调用函数prmatrix(cost,n),打印邻接矩阵cost[][]; 3. 调用单源最短带权路径函数dijkstra(cost,n),求得源点①→(v)各顶点的最短路径; 4. 定义函数diskstra(cost,n) (1) 定义数组okset[](S集合),当okset[i]=0,顶点(i)留在V-S集合;okset[i]=1,顶点(i)入选S集合; (2)定义数组dis[],存放①→(v),从源点到其它顶点(v)的当前最短带权距离; (3)赋初值 for(i=1;i=n;i++) { dis[i] 赋初值; okset[i] 赋初值0 ;} (4)调用函数trace(okset,dis,n) ,打印初态的S集合和dis[]; (5)调整源点→各顶点的距离 for(i=1;i=n-1,i++) { 调用minicost(dis,okset,n) , 从V-S集合中选出dis[]值为最小的顶点(W); okset[w]=1; /* 顶点(w)入选S数组 */ for(V=2;V=n;V++) /* 调整从源点①到其它顶点的距离 */ { if(okset[v]==0) { sum=dis[w]+cost[w][v];/* 求①→(W)+(W)→(v)借道(W)的带权距离sum */ dis[v]=(dis[v]sum)? dis[v]:sum;/* 比较①→(v)与sum,取最小值并更新dis[v] */ } 调用trace(okset,dis,n) ;/* 打印一行当前入选S的顶点和当前①→(v)的最短路径 */ (6)调用函数putdist(dis,n) ;/*打印①→(v)的最后结果,从源点到各顶点(v)的最短带权路径*/ 5.定义函数minicost(dis,okset,n) 在V-S中求取顶点(W),使在okset[]=0的顶点中dis[w]的值为最小,返回W ; 6.定义函数 putdist(dis,n) ; 打印最后结果,①→(v), 源点到各顶点的最短带权路径; 7.定义函数 trace(okset,dis,n) 打印一行当前值,是当前S集合中的顶点以及源点①到各顶点的当前最短带权路径。 例:第一行 1 0 0

文档评论(0)

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

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

1亿VIP精品文档

相关文档