版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1:为了能够求解边上带有负值的单源最短路径问题,为了能够求解边上带有负值的单源最短路径问题,Bellman(贝尔曼贝尔曼)和和Ford(福福特特)提出了提出了的方法。的方法。的的:要求图中不能包含要求图中不能包含(),如下图所示。,如下图所示。20117-2(c)Bellman-Ford算法2Bellman-Ford算法思想构造一个最短路径长度数组序列构造一个最短路径长度数组序列dist 1 u, dist 2 u, , dist n-1 u。其中:其中:为从源点为从源点v到终点到终点u的只经过一条边的最短路径长度,并有的只经过一条边的最短路径长度,并有dist 1 u =Edgevu;为从源
2、点为从源点v到达终点到达终点u的最短路径长度;的最短路径长度;为从源点为从源点v出发出发到达终点到达终点u的最短的最短路径长度;路径长度;为从源点为从源点v出发出发到达终点到达终点u的最的最短路径长度;短路径长度;算法的最终目的是计算出算法的最终目的是计算出dist n-1 u,为源点,为源点v到顶点到顶点u的最短路径长度。的最短路径长度。3 dist k u。v设已经求出设已经求出 , u = 0, 1, , n-1,此即从源点,此即从源点v最多经过不构成最多经过不构成的的k-1条边到达终点条边到达终点u的最短路径的长度。的最短路径的长度。v从图的邻接矩阵可以找到各个顶点从图的邻接矩阵可以找
3、到各个顶点j到达顶点到达顶点u的距离的距离Edgeju,计算,计算,可得从源点,可得从源点v,最多经过不构,最多经过不构成成的的k条边到达终点条边到达终点u的最短路径的长度。的最短路径的长度。v比较比较和和,取较小者作为,取较小者作为dist k u的值。的值。递推公式递推公式(求顶点求顶点u到源点到源点v的最短路径的最短路径): = = min , , j=0,1,n-1,ju4461230565-2-25-1-1133(c)6543210030301021021055606 5 4 3 2 1 0 kdist k 0dist k 1dist k 2dist k 3 dist k 4dist
4、 k 5dist k 61065520530354401354501350460135043 = min , = min6, mindist10+Edge01, dist12+Edge21, 5#define MAX_VER_NUM 10/顶点个数最大值顶点个数最大值#define MAX 1000000int EdgeMAX_VER_NUMMAX_VER_NUM; /图的邻接矩阵图的邻接矩阵int vexnum;/顶点个数顶点个数void BellmanFord(int v) /假定图的邻接矩阵和顶点个数已经读进来了假定图的邻接矩阵和顶点个数已经读进来了int i, k, u;for(i=0
5、; ivexnum; i+)disti=Edgevi;/对对dist 初始化初始化if( i!=v & disiMAX ) pathi = v;/对对path 初始化初始化else pathi = -1;1.本算法使用同一个数组本算法使用同一个数组来存放一系列的来存放一系列的 。其中其中k = 0, 1, , n-1。算法结束时中存放的是。算法结束时中存放的是 。数组含义同数组含义同中的中的数组。数组。6for(k=2; kvexnum; k+) /从从dist1u递推出递推出dist2u, ,distn-1ufor(u=0; u vexnum; u+)/修改每个顶点的修改每个顶点的distu
6、和和pathuif( u != v )for(i=0; ivexnum; i+)/考虑其他每个顶点考虑其他每个顶点if( Edgeiudisti+Edgeiu )distu=disti+Edgeiu;pathu=i;如果dist 各元素的初值为MAX,则循环应该n-1次,即k的初值应该改成1。7Dijkstra算法与Bellman算法的区别Dijkstra算法和Bellman算法思想有很大的区别:Dijkstra算法在求解过程中,源点到集合S内各顶点的最短路径一旦求出,则之后不变了,修改的仅仅是源点到T集合中各顶点的最短路径长度。Bellman算法在求解过程中,每次循环都要修改所有顶点的dis
7、t ,也就是说源点到各顶点最短路径长度一直要到Bellman算法结束才确定下来。8在求出在求出distn-1 之后,再对每条边之后,再对每条边判断一下:加入这条判断一下:加入这条边是否会使得顶点边是否会使得顶点v的最短路径值再缩短,即判断:的最短路径值再缩短,即判断:distu+w(u,v)distv是否成立,如果成立,则说明存在从源点可达的是否成立,如果成立,则说明存在从源点可达的。代码如。代码如下:下:for (i=0;in;i+)for (j=0;jn;j+)if (Edgeijdisti+Edgeij)return 0;/存在从源点可达的负权值回路存在从源点可达的负权值回路return
8、 1;9假设图的顶点个数为n,边的个数为e。算法中有一个三重嵌套的for循环,如果:使用邻接矩阵存储图,最内层if语句的总执行次数为O(n3),因此算法的复杂度为O(n3);使用邻接表存储图,内层的两个for循环改成while循环,可以使算法的复杂度降为O(n*e)。10Bellman-Ford算法思想的另一种理解前面已经提到:如果使用邻接表存储图,内层的两个前面已经提到:如果使用邻接表存储图,内层的两个for循环改成循环改成while循环,可以使算法的复杂度降为循环,可以使算法的复杂度降为O(n*e)。而。而。:对图中的每条有向边:对图中的每条有向边,权值为,权值为w,如果,如果distu+
9、wdistv,即,即,那么应该修改,那么应该修改distv,修改成,修改成distu+w。11MAX 999999 EDGE_MAX 100 /边数最大值边数最大值 VER_MAX 50/顶点个数最大值顶点个数最大值 Edge u, v, w;/边:起点、终点、权值边:起点、终点、权值;Edge edgesEDGE_MAX;/存储所有的边存储所有的边 m;/实际边的个数实际边的个数 n;/顶点个数顶点个数/* dist为源点为源点v0到各顶点的最短距离到各顶点的最短距离,如果初始为如果初始为v0到各顶点直接边的长度到各顶点直接边的长度,则则算法中的循环要执行算法中的循环要执行n-2次,如果初始
10、为次,如果初始为MAX,则循环要执行,则循环要执行n-1次,第一次求得的次,第一次求得的dist就是就是v0到各顶点直接边的长度到各顶点直接边的长度*/ distVER_MAX=MAX; /假定边的数组、边的个数这些信息已经读进来了假定边的数组、边的个数这些信息已经读进来了假设图中有关边的数据结构如下:假设图中有关边的数据结构如下:12bool bellman_ford()/bellman-ford算法算法int i, k, t;for(i = 1; i n; i +)/*假设第假设第k条边的起点是条边的起点是u,终点是终点是v,以下循环考虑第以下循环考虑第k条边是否会使得源点条边是否会使得源点v0到到v的的最短距离缩短最短距离缩短,即判断即判断distedgesk.u + edgesk.w distedgesk.v 是否成立是否成立*/for(k = 0; k m; k +)t = distedgesk.u + edgesk.w;if(distedgesk.u != mx & t distedgesk.v)distedgesk.v = t;/*以下是检查,若还有更新则说明存在无限循环的负值回路以下是检查,若还有更新则说明存在无限循环的负值回路*/for(k = 0; k m; k +)if(d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB 7956.8-2025消防车第8部分:高倍泡沫消防车
- 心脑血管疾病健康促进预警策略
- 心脏神经官能症长期随访管理方案
- 心脏术后低心排综合征支持策略
- 心胸外科术后快速康复的体验优化
- 心肌梗死基因治疗的靶向递送策略
- 心理干预在快速康复中的价值
- 微生物组数据挖掘与肠道疾病精准干预
- 微创手术中神经影像的辐射防护策略
- 微创手术在神经重症中的适应证选择
- 小学的思政教育
- 员工外出培训安全协议8篇
- 贵州省贵阳市普通中学2024-2025学年高一上学期期末英语试题(含答案无听力原文及音频)
- 小学一年级20以内连加连减口算练习题1080道
- 绿色施工实施策划方案
- DB41T 2202-2021 水利工程白蚁防治项目验收技术规程
- 石家庄市新华区2024-2025学年六上数学期末监测试题含解析
- 广州市2022-2023学年七年级上学期期末数学试卷【带答案】
- 年度个人工作总结护士
- 电气施工管理方案
- 2022-CSP-J入门级第一轮试题答案与解析
评论
0/150
提交评论