弗洛伊德(Floyd)算法
来源:互联网 发布:网络现金赌博官网 编辑:程序博客网 时间:2024/04/30 02:00
弗洛伊德(Floyd)算法求图中两点的最短路径
佛罗依德(Floyd )算法的基本思想:
设图g用邻接矩阵法表示,求图g中任意一对顶点vi与vj间的的最短路径。
(-1)将vi到vj的最短的路径长度初始化为g.arcs[i][j].adj,进行如下n次比较和修正:
(0)在vi与vj间加入顶点v0,比较(vi, v0, vj )和(vi, vj)的路径的长度,取其中较短的路径作为vi到vj的且中间顶点编号不大于0的最短路径。
(1)在vi与vj间加入顶点v1,得(vi,…, v1 )和(v1,…, vj),其中(vi,…, v1)是vi到v1间中间顶点编号不大于0的最短路径,(v1,…, vj)是v1到vj的且中间顶点编号不大于0的最短路径,这两条路径在上一步中均已求出。将(vi,…, v1,…, vj )与上一步已求出的vi到vj中间顶点号不大于0的最短路径比较,取其中较短的路径作为vi到vj的中间顶点号不大于1的最短路径。
(2)在vi与vj间加入顶点v2,得(vi,…,v2)和(v2,…, vj ),其中(vi,…,v2)是vi到v2 的中间顶点号不大于1的最短路径,(v2,…, vj) 是v2到vj的中间顶点号不大于1的最短路径,这两条路径在上一步中已求出。将(vi,…,v2,…,vj)与上一步已求出的vi到vj中间顶点号不大于1的最短路径比较,取其中较短的路径作为vi到vj的中间顶点号不大于2的最短路径。
…
依次类推,经过n次比较和修正,在第(n-1)步,将求得vi到vj的且中间顶点号不大于n-1的最短路径,必为从vi到vj的最短路径。
typedef Seqlist VertexSet;ShortestPath_Floyd(AdjMartrix g, WeightType dist[MAX_VERTEX_NUM][MAX_VERTEX_NUM]), VertexSet path[MAX_VERTEX_NUM][MAX_VERTEX_NUM]) {/*g为带权有向图的邻接矩阵表示发,path[i]vi到vj的当前最短路径,dist[i][j]为vi到vj的最短路径长度*/ for(i = 0; i < g.vexnum; i++) { //初始化dist[i][j]和path[i][j] for(j = 0; j < g.vexnum; j++) { InitList(&p[i][j]); dist[i][j] = g.arcs[i][j].adj; if(dist[i][j] < INFINITY) { AddTail(&path[i][j], g.vertex[i]); AddTail(&path[i][j], g.vertex[j]); } } } for(k = 0; k < g.vexnum; k++) { for(i = 0; i < g.vexnum; i++) { for(j = 0; j <g.vexnum; j++) { if(dist[i][k] + dist[k][j] < dist[i][j]) { dist = dist[i][k] + dist[k][j]; path = JoinList(path[k][i], path[i][j]); }//End if JoinList合并顺序表操作 } //End for(j) } //End for(i) } //End for(k) }
知乎:Solo | 微博@从流域到海域
0 0
- 弗洛伊德(Floyd)算法
- 弗洛伊德(Floyd)算法
- 弗洛伊德(Floyd)算法
- 弗洛伊德算法(Floyd)
- 弗洛伊德(Floyd)算法
- 弗洛伊德(Floyd)算法
- 弗洛伊德(Floyd)算法
- 【弗洛伊德Floyd算法验证】
- Floyd算法(弗洛伊德算法)
- 弗洛伊德(Floyd)算法过程
- 弗洛伊德(Floyd)算法过程
- 七龙珠 Floyd-Warshall 弗洛伊德算法
- Floyd’s Algorithm 弗洛伊德算法
- Floyd(弗洛伊德)算法 详解+模板
- Floyd算法(弗洛伊德算法) 百度百科
- A*寻路 -- 弗洛伊德(Floyd)算法
- 最短路径之弗洛伊德算法(Floyd)
- 最短路径之Floyd(弗洛伊德)算法
- 一个函数使用另一个函数中的变量
- uva_10180_Rope Crisis in Ropeland!_WA
- PHP CURL上传文件出现413 Request Entity Too Large
- 移动平台—企业转型需要的核心驱动力
- Spark定制班第7课:Spark Streaming源码解读之JobScheduler内幕实现和深度思考
- 弗洛伊德(Floyd)算法
- Service-四大组件之一
- Loss和神经网络训练
- Android桌面插件Widgets
- Canvas填充样式fillStyle
- Android动画进阶(Interpolator)
- symfony2 学习2 表单创建 使用
- Ant 替换某一文件中的字符串
- pc直接粘贴到div图片