版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、7.6.2每一对顶点间的最短路径Dijkstra算法是求源点到其它顶点的最短路径。怎样求任意两个顶点之间的最短路径?我们可以把Dijkstra算执行n次,每次从不同的顶点开始,则算法时间复杂度为O(n3)。Floyd弗洛伊德给出了另一个算法,时间复杂度也是O(n3),但是形式上简单些。从演示中看算法思想一个简单的图及其邻接矩阵如下:abc116423abca(aa,0)(ab,4)(ac,11)b(ba,6)(bb,0)(bc,2)c(ca,3)(cb, )(cc,0)D(-1)从上面的D(-1)开始,对于每两个顶点u、v,在D(-1)中存储着一条路径uv。现在我们考察,试着把a加到u、v的路
2、径上能否,得到一条更短的路径,即如果ua+avDbc=2,所以如果从a绕,反而远,那么这一项不变。abc116423abca(aa,0)(ab,4)(ac,11)b(ba,6)(bb,0)(bc,2)c(ca,3)(cb, )(cc,0)D(-1)abca(aa,0)(ab,4)(ac,11)b(ba,6)(bb,0)(bc,2)c(ca,3)(cc,0)D(0)abc116423abca(aa,0)(ab,4)(ac,11)b(ba,6)(bb,0)(bc,2)c(ca,3)(cb, )(cc,0)D(-1)abca(aa,0)(ab,4)(ac,11)b(ba,6)(bb,0)(bc,2)
3、c(ca,3)(cc,0)D(0)Dca+Dab=3+4Dcb= ,所以如果从a绕,更近,那么应该更新。abc116423abca(aa,0)(ab,4)(ac,11)b(ba,6)(bb,0)(bc,2)c(ca,3)(cb, )(cc,0)D(-1)abca(aa,0)(ab,4)(ac,11)b(ba,6)(bb,0)(bc,2)c(ca,3)(cab,7)(cc,0)D(0)从上面的D(0)开始,对于每两个顶点u、v,在D(0)中存储着一条路径uv。现在我们考察,试着把b加到u、v的路径上能否,得到一条更短的路径,即如果ub+bvuv的话,能够找到一条更短的路径。abc116423ab
4、ca(aa,0)(ab,4)b(ba,6)(bb,0)(bc,2)c(cab,7)(cc,0)D(1)abca(aa,0)(ab,4)(ac,11)b(ba,6)(bb,0)(bc,2)c(ca,3)(cab,7)(cc,0)D(0)本来路径上源点或终点就有b的不必考虑。对角线上的也不必考虑abc116423abca(aa,0)(ab,4)b(ba,6)(bb,0)(bc,2)c(cab,7)(cc,0)D(1)abca(aa,0)(ab,4)(ac,11)b(ba,6)(bb,0)(bc,2)c(ca,3)(cab,7)(cc,0)D(0)Dab+Dbc=6Dca=3,所以如果从b绕,反而远
5、,那么这一项不变。abc116423abca(aa,0)(ab,4)(abc,6)b(ba,6)(bb,0)(bc,2)c(ca,3)(cab,7)(cc,0)D(1)abca(aa,0)(ab,4)(ac,11)b(ba,6)(bb,0)(bc,2)c(ca,3)(cab,7)(cc,0)D(0)从上面的D(1)开始,对于每两个顶点u、v,在D(1)中存储着一条路径uv。现在我们考察,试着把c加到u、v的路径上能否,得到一条更短的路径,即如果uc+cvDab=4,所以如果从c绕,反而远,那么这一项不变。abc116423abca(aa,0)(ab,4)(abc,6)b(bb,0)(bc,2)
6、c(ca,3)(cab,7)(cc,0)D(2)abca(aa,0)(ab,4)(abc,6)b(ba,6)(bb,0)(bc,2)c(ca,3)(cab,7)(cc,0)D(1)abc116423abca(aa,0)(ab,4)(abc,6)b(bb,0)(bc,2)c(ca,3)(cab,7)(cc,0)D(2)abca(aa,0)(ab,4)(abc,6)b(ba,6)(bb,0)(bc,2)c(ca,3)(cab,7)(cc,0)D(1)Dbc+Dca=2+3Dba=6,所以如果从c绕,更近,那么应该更新。abc116423abca(aa,0)(ab,4)(abc,6)b(bca,5)
7、(bb,0)(bc,2)c(ca,3)(cab,7)(cc,0)D(2)abca(aa,0)(ab,4)(abc,6)b(ba,6)(bb,0)(bc,2)c(ca,3)(cab,7)(cc,0)D(1)Dbc+Dca=2+3Dba=5,所以如果从c绕,更近,那么应该更新。现在,已经把所有的顶点都试了一遍,算法结束。每两个顶点之间的路径如D(2)所示。abca(aa,0)(ab,4)(abc,6)b(bca,5)(bb,0)(bc,2)c(ca,3)(cab,7)(cc,0)D(2)采用图的邻接矩阵的存储结构怎样构造一个图,在此不赘述,直接给出floyd-wallshall算法。void MD
8、Net:Floyd(CDC *pDC)typedef vector path;/使用顺序表模板path pmax_vertex_nummax_vertex_num;/p存放每对顶点之间的最短路径int Dmax_vertex_nummax_vertex_num;/ D存放每对顶点之间的最短路径值int i,j,k;for(i=1;i=vex_num;i+)/初始化for(j=1;j=vex_num;j+)pij.push_back(i);pij.push_back(j);/顶点i和顶点j之间的路径初始时就是ij。Dij=arcsij;/路径值为边(i,j)的权值 for(k=1;k=vex_num;k+) /对于每一个顶点都要试探for(i=1;i=vex_num;i+)for(j=1;j=vex_num;j+)/在顶点i和顶点j之间的路径上试探kif(i=j)continue;/对角线上的元素(即顶点自身之/间)不予考虑if(Dik+DkjDij)/发现更短的路径Dij=Dik+Dkj;/新的i、j间的路径由两部分组成/pik+pkjpij=pikfor(int m=1;mpkj.size();m+)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026云南临沧耿马傣族佤族自治县人民医院招聘6人备考题库及答案详解(典优)
- 2026年吉林大学辅导员招聘补充备考题库及参考答案详解
- 2026西南民族大学合同制教职工招聘19人备考题库附答案详解ab卷
- 2026江苏常铝铝业集团股份有限公司招聘4人备考题库含答案详解(巩固)
- 2026上半年广东省城际轨道交通运营有限公司生产人员招聘备考题库及答案详解(易错题)
- 纸张生产工艺与质量控制手册
- 2026江铜集团德兴铜矿春季校园招聘备考题库含答案详解(预热题)
- 2026山东师范大学附属小学第二批招聘14人备考题库及答案详解(易错题)
- 2026河北秦皇岛市市直医疗卫生单位第二批招聘工作人员36人备考题库含答案详解(满分必刷)
- 2026浙江台州玉环市人力资源配置服务有限公司招聘2人备考题库附答案详解(突破训练)
- 企业行政管理实务(含活页实训手册) 课件 9建立工作程序
- MOOC 颈肩腰腿痛中医防治-暨南大学 中国大学慕课答案
- 思皓E10X保养手册
- 安全监理考试题库
- 市政道路改造管网施工组织设计
- 海外项目科技技术管理探讨汇报材料
- 2022年菏泽职业学院教师招聘考试真题
- 超声波清洗机的系统设计(plc)大学论文
- 轧钢厂安全检查表
- GB/T 17989.3-2020控制图第3部分:验收控制图
- 尿素-化学品安全技术说明书(MSDS)
评论
0/150
提交评论