Floyed算法

其实这个算法很简单啦,记不住各种算法的名字

从这个链接拷过来的 http://hi.bccn.net/space-166490-do-blog-id-10914.html


从有向图的带权的邻接矩阵 cost出发,对有向图的n个顶点加以编号,若从ij有弧(i=12...nj=12...n),则从i存在一条长度为cost(ij)的路线。但该路径不一定是最短路径,尚需修改,修改的方法是进行n次试探。首先考虑路径(i1j)(即在ij中插进点1),看〈i1〉,〈1j〉是否存在,若存在,再比较 ij)与(i1j)这两条路径,长度较短者为当前求得的最短路径。于是这条求得的最短路径的 中间点序号不大于1。然后再在各对点ij中插进一个点2,看〈i...2〉,〈2...j〉是否存在, 若不存在,那么当前的最短路径仍是上次求得的中间点序号不大于1的最短路径;若存在,则将 i...2j)的路径与前次求出的中间点序号不大于1的最短路径进行比较,取长度较短者 为当前的最短路径。这样,这次求得的最短路径的中间点序号不大于2......,依次类推,直至求得 ij的最短路径。

    Floyed的主程序段很精简,就是3重循环。

    for (k = 0; k < n; k ++)

              for (i = 0; i < n; i ++)

                     if (i != k) for (j = 0; j < n; j ++)

                            if ((j != i && j != k) && (map[i][k] + map[k][j] < map[i][j]))

                                   map[i][j] = map[i][k] + map[k][j];



北大ACM题库里的2263题,实现这个算法就OK了

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值