博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最短路径算法之一——Floyd算法
阅读量:5162 次
发布时间:2019-06-13

本文共 907 字,大约阅读时间需要 3 分钟。

Floyd算法

  Floyd算法可以用来解决任意两个顶点之间的最短路径问题。

  核心公式为:

      Edge[i][j]=Min{Edge[i][j],Edge[i][k]+Edge[k][j]}

  即通过对i,j两个顶点之间插入顶点后比较路径的大小来进行松弛。

  首先我们来定义一个二维数组Edge[MAXN][MAXN]来存储图的信息。

 

    这个图的Edge数组初始化以后为

 

相当于任意两点之间不允许经过其他点时的距离情况。

Code1:

1 //经过1号顶点2 for(i=1;i<=n;i++)3     for(j=1;j<=n;j++)4         if (e[i][j] > e[i][1]+e[1][j])  e[i][j]=e[i][1]+e[1][j];

这里表示允许一号顶点作为中间点来松弛距离,并保存松弛完的结果。

Code2:

1 //经过2号顶点2 for(i=1;i<=n;i++)3     for(j=1;j<=n;j++)4         if (e[i][j] > e[i][2]+e[2][j])  e[i][j]=e[i][2]+e[2][j];

允许一号顶点和二号顶点作为中间点来松弛,并保存。(不是必定会松弛!)

。。。。。

Floyd核心代码:

 

1 for(k=1;k<=n;k++)2     for(i=1;i<=n;i++)3         for(j=1;j<=n;j++)4             if(e[i][j]>e[i][k]+e[k][j])5                  e[i][j]=e[i][k]+e[k][j];

 

这段代码的基本思想就是:最开始只允许经过1号顶点进行中转,接下来只允许经过12号顶点进行中转……允许经过1~n号所有顶点进行中转,求任意两点之间的最短路程。用一句话概括就是:从i号顶点到j号顶点只经过前k号点的最短路程。

时间复杂度:O(n^3)

部分图片文字摘自于啊哈磊的blog。

 

 

转载于:https://www.cnblogs.com/Enumz/p/3862650.html

你可能感兴趣的文章
Layout1:Grid(补交作业)
查看>>
实用ASP.NET七大内置对象详解
查看>>
GPT+UEFI+双硬盘+双系统 win10+ubuntu 安装指导
查看>>
软件测试第二次上机实验——Selenium的使用
查看>>
javascript常用函数集
查看>>
JavaScript 的使用基础总结③
查看>>
Why does "ps -aux" complain about a bogus '-'?
查看>>
Unity3d 小游戏从入门到???
查看>>
关于API设计规范
查看>>
【WPF】OpacityMask作用于Button的一点体会
查看>>
ant构建工具
查看>>
Alpha项目冲刺(团队作业5)
查看>>
codeforce830A. Office Keys
查看>>
CF 480 E. Parking Lot
查看>>
一个屌丝程序猿的人生(九十)
查看>>
关于java和jvm的思考
查看>>
企业级编号
查看>>
高校成绩管理数据库系统的设计与实现 - 实验报告
查看>>
PM(Project Manager):系列博客
查看>>
spring事务之——spring配置事务的五种方式
查看>>