前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >弗洛伊德(Floyd)算法

弗洛伊德(Floyd)算法

作者头像
Steve Wang
发布2018-02-05 17:00:32
8100
发布2018-02-05 17:00:32
举报
文章被收录于专栏:从流域到海域从流域到海域

弗洛伊德(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的最短路径。

代码语言:javascript
复制
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 | 微博@从流域到海域

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年05月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 弗洛伊德(Floyd)算法求图中两点的最短路径
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档