QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22548|回复: 58
打印 上一主题 下一主题

弗洛伊德算法

[复制链接]
字体大小: 正常 放大

13

主题

2

听众

1074

积分

升级  7.4%

  • TA的每日心情
    无聊
    2013-12-11 13:50
  • 签到天数: 49 天

    [LV.5]常住居民I

    跳转到指定楼层
    1#
    发表于 2010-8-7 20:57 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    求弗洛伊德算法的具体介绍( L% r: d& \) R% {
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    紫辰 实名认证       

    12

    主题

    16

    听众

    1304

    积分

    升级  30.4%

  • TA的每日心情
    擦汗
    2013-2-5 09:29
  • 签到天数: 35 天

    [LV.5]常住居民I

    自我介绍
    200 字节以内

    不支持自定义 Discuz! 代码

    群组学术交流A

    群组数学建模保研联盟

    群组Matlab讨论组

    群组湖南大学数学建模

    群组学术交流B

    回复

    使用道具 举报

    linmatsas 实名认证       

    53

    主题

    13

    听众

    3591

    积分

    逍遥游

  • TA的每日心情
    奋斗
    2014-12-2 09:53
  • 签到天数: 54 天

    [LV.5]常住居民I

    自我介绍
    额。。。。世界上最讨厌的事情就是自我介绍。。。

    邮箱绑定达人 新人进步奖 发帖功臣 最具活力勋章

    群组Matlab讨论组

    群组数学建模

    群组小草的客厅

    群组2012数学一考研交流

    群组C 语言讨论组

    回复

    使用道具 举报

    jians 实名认证       

    0

    主题

    2

    听众

    11

    积分

    升级  6.32%

    该用户从未签到

    回复

    使用道具 举报

    13

    主题

    2

    听众

    1074

    积分

    升级  7.4%

  • TA的每日心情
    无聊
    2013-12-11 13:50
  • 签到天数: 49 天

    [LV.5]常住居民I

    谢谢,这是我找到的一些资料,大家共享
    # u# j5 z7 Z) e5 i算法基本思想
    ) {7 o' R" H9 B! |/ u) p7 H假设求顶点Vi到Vj的最短路径。弗洛伊德算法依次找从Vi到Vj,中间经过结点序号不大于0的最短路径,不大于1的最短路径,…直到中间顶点序号不大于n-1的最短路径,从中选取最小值,即为Vi到Vj的最短路径。' f4 E, J( r, y3 G' v+ b- h
    # w4 N7 p5 G* V$ u+ Z# H
                    算法具体描述
    % n4 d" C( Y2 F5 z/ F若从Vi到Vj有弧,则从Vi到Vj存在一条长度为弧上权值(arcs[i][j] )的路径,该路径不一定是最短路径,尚需进行n次试探。 首先考虑从Vi到Vj经过中间顶点V0的路径(Vi,V0,Vj)是否存在,也就是判断弧(Vi,V0)和(V0,Vj)是否存在。若存在,则比较(Vi,Vj)和(Vi,V0,Vj)的路径长度取较短的为从Vi到Vj的中间顶点序号不大于0的最短路径。在此路径上再增加一个顶点V1,也就是说,如果(Vi,…V1)和(V1,…Vj)分别是当前找到的中间顶点序号不大于0的最短路径,那么,(Vi,…V1,…Vj)就有可能是从Vi到Vj的中间顶点序号不大于1的最短路径。将它和已经得到的从Vi到Vj中间顶点序号不大于0的最短路径相比较,从中选出最短的作为从Vi到Vj中间顶点序号不大于1的最短路径。然后,再增加一个顶点V2继续进行这个试探过程。一般情况下,若(Vi,…Vk)和(Vk,…Vj)分别是从Vi到Vk和从Vk到Vj的中间顶点序号不大于k-1的最短路径,则将(Vi,…,Vk,…Vj)和已经得到的从Vi到Vj的中间顶点序号不大于k-1的最短路径相比较,其长度最短者即为从Vi到Vj的中间顶点序号不大于k的最短路径。经过n次比较之后,最后求得的便是从Vi到Vj的最短路径。   按此方法可同时求得各对顶点之间的最短路径。 现定义一个n阶方阵序列  D(-1),D(0),D(1),…,D(k),…,D(n-1)其中  D(-1)[i][j]=arcs[i][j]  D(k)[i][j]=Min{ D(k-1)[i][j], D(k-1)[i][k]+D(k-1)[k][j]}    0≤k≤n-1  上述公式中,D(1)[i][j]是从 Vi到Vj的中间顶点序号不大于 k的最短路径长度;D(n-1)[i][j]是从Vi到Vj的最短路径长度。
    ' x4 R7 ]: l" Y) G* k1 v2 x% h- p9 O
    * q5 Y) u( e" @              算法实现4 f' S- ~% ?. `; L7 n* g: G
    void shortestpath_Floyd(Mgraph G,pathmatrix &[],Distancmatrix &D){
    . U: M! M6 Y9 f3 A//用Floyd算法求有向网G中各对顶点v和w之间的最短路径P[v][w]及其带权路径长度D[v][w]。 //若P[v][w][u]为TRUE,则u是从v到w当前求得最短路径上的顶点。 For (v=0;v<G.vexnum;++v)   //各对顶点之间路径和距离初始化  For (w=0;w<G.vexnum;++w){   D[v][w]=G.arcs[v][w];   For (u=0;u<G.vexnum;++u)  P[v][w][u]=false;   If (D[v][w]<INFINITY){     //从v到w有直接路径      P[v][w][v]=true[v][w][w]=true;      }//if}//forfor (u=0;u<G.vexnum;++u) for (v=0;v<G.vexnum;++v)for (w=0;w<G.vexnum;++w) if (D[v][u]+D[u][w]<D[v][w]){  //从v经u到w的一条路径更短    D[v][w]= D[v][u]+D[u][w];    For (I=0;I<G.vexnum;++I)       P[v][w][I]=P[v][u][I]|| P[u][w][I];  }//if}//shortestpath_Floyd     给出一个图,求最短路径问题的一个O(n^3)算法优点:容易理解,可以算出任意两个节点之间最短距离的算法,程序容易写缺点:复杂度达到三次方,不适合计算大量数据- x7 v% a5 X* s3 t+ A7 t% c0 [
    Floyd算法的功能是通过一个图的权值矩阵求出它的每两点间的最短路径矩阵.它的功能看上去挺强大的,但它的实现却很简单,和Washall算法很相似,也是一个三层循环,思路也是相似是,就是利用前面计算的结果:核心思想:设立[i,j]为权值在这里有个地方要注意一下,就是最外层的循环k是一个中间的跳板,必须放在中间,不然就找不到最小的值for(k=0;k<len;k++)for(i=0;i<len;i++)for(j=0;j<len;j++)if(a[i,k]+a[k,j]<a[i,j])a[i,j]=a[k,j]+a[i,k];
    回复

    使用道具 举报

    wajm_011 实名认证       

    3

    主题

    6

    听众

    1163

    积分

    升级  16.3%

  • TA的每日心情
    郁闷
    2012-2-14 03:19
  • 签到天数: 13 天

    [LV.3]偶尔看看II

    自我介绍
    建模,加油加油!!!

    群组数学建摸协会

    群组哈尔滨工业大学建模团

    群组东北三省联盟

    群组Matlab讨论组

    群组数学建模保研联盟

    回复

    使用道具 举报

    dawan 实名认证       

    0

    主题

    3

    听众

    211

    积分

    升级  55.5%

  • TA的每日心情
    开心
    2011-11-29 12:09
  • 签到天数: 1 天

    [LV.1]初来乍到

    回复

    使用道具 举报

    tianya-01        

    0

    主题

    2

    听众

    31

    积分

    升级  27.37%

    该用户从未签到

    网络挑战赛参赛者

    新人进步奖

    回复

    使用道具 举报

    freeaward        

    0

    主题

    2

    听众

    30

    积分

    升级  26.32%

    该用户从未签到

    新人进步奖

    回复

    使用道具 举报

    wy371tt1        

    0

    主题

    2

    听众

    70

    积分

    升级  68.42%

    该用户从未签到

    新人进步奖

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-9-17 01:45 , Processed in 0.984272 second(s), 105 queries .

    回顶部