Bellmanford算法.ppt
《Bellmanford算法.ppt》由会员分享,可在线阅读,更多相关《Bellmanford算法.ppt(13页珍藏版)》请在三一办公上搜索。
1、Bellman-Ford算法:为了能够求解边上带有负值的单源最短路径问题,Bellman(贝尔曼)和Ford(福特)提出了从源点逐次绕过其他顶点,以缩短到达终点的最短路径长度的方法。,Bellman-Ford算法的限制条件:要求图中不能包含权值总和为负值回路(负权值回路),如下图所示。Why?,Bellman-Ford算法,Bellman-Ford算法思想,Bellman-Ford算法构造一个最短路径长度数组序列dist 1 u,dist 2 u,dist n-1 u。其中:dist 1 u为从源点v到终点u的只经过一条边的最短路径长度,并有dist 1 u=Edgevu;dist 2 u为从
2、源点v最多经过两条边到达终点u的最短路径长度;dist 3 u为从源点v出发最多经过不构成负权值回路的三条边到达终点u的最短路径长度;dist n-1 u为从源点v出发最多经过不构成负权值回路的n-1条边到达终点u的最短路径长度;算法的最终目的是计算出dist n-1 u,为源点v到顶点u的最短路径长度。,dist k u的计算,采用递推方式计算 dist k u。设已经求出 dist k-1 u,u=0,1,n-1,此即从源点v最多经过不构成负权值回路的k-1条边到达终点u的最短路径的长度。从图的邻接矩阵可以找到各个顶点j到达顶点u的距离Edgeju,计算min dist k-1 j+Edg
3、eju,可得从源点v绕过各个顶点,最多经过不构成负权值回路的k条边到达终点u的最短路径的长度。比较dist k-1 u和min dist k-1 j+Edgeju,取较小者作为dist k u的值。,递推公式(求顶点u到源点v的最短路径):dist 1 u=Edgevudist k u=min dist k-1 u,min dist k-1 j+Edgeju,j=0,1,n-1,ju,例子,dist 2 1=min dist 1 1,min dist 1 j+Edgej1=min6,mindist10+Edge01,dist12+Edge21,算法实现,#define MAX_VER_NUM
4、10/顶点个数最大值#define MAX 1000000int EdgeMAX_VER_NUMMAX_VER_NUM;/图的邻接矩阵int vexnum;/顶点个数void BellmanFord(int v)/假定图的邻接矩阵和顶点个数已经读进来了int i,k,u;for(i=0;ivexnum;i+)disti=Edgevi;/对dist 初始化if(i!=v,注意:本算法使用同一个数组dist u来存放一系列的dist k u。其中k=0,1,n-1。算法结束时中存放的是dist n-1 u。path数组含义同Dijkstra算法中的path数组。,for(k=2;kdisti+Ed
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Bellmanford 算法
链接地址:https://www.31ppt.com/p-5416421.html