如题,这是最短路算法Floyd。

Floyd,是只有五行的代码。

简单,易懂。O(N的三方)的时间也可以。

遇到简单的就这么用。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<queue>
#define s(q) scanf("%d",&q)
#define p(q) printf("%d",q)
#define pk(q) printf(" %d",q)
#define pp printf("\n")
#define lp(q) printf("%lld",q)
#define r(q) return q;
#define ffor(i,l,k) for(i=l;i<=k;i++)
using namespace std;
int n,i,j,k;
int a[][];
void Floyd(){
ffor(i,,n)
ffor(j,,n)
ffor(k,,n)
if(a[i][j]>a[k][j]+a[i][k] && a[k][j]+a[i][k]>)
a[i][j]=a[k][j]+a[i][k];
}
int main(){
s(n);
ffor(i,,n)
ffor(j,,n)
s(a[i][j]);
Floyd();
/*ffor(i,1,n){
ffor(j,1,n){
pk(a[i][j]);
}pp;
}*/
r();
}

这一条是不是很简单?

Floyd的作用就是帮你寻找两个点的最短路,就是:

如果i点到j点的路线大于i点到k点,然后再转到j点的路线,那么你就可以将i点到j点的路线替换为i点到k点,然后再转到j点的路线。

如果说两条边不能通,设为正无穷也可以。

我的输入可以改成:

现将所有的点与点的边变为正无穷,然后在输入某一点到另一点的,更新数据,再Floyd。

注意:要找到不能找为止!

值得一提的是,Floyd并不能“负权回路”,因为这种东西没有最短路。

就像这样:1->2->3->1->2......1->2->3......每一次循环最短路就会减少1,永远找不到。

如果要快,可以用Dijkstra算法(空间复杂度O(M),时间复杂度O(M+N)logN)以及Bellman-Ford及其优化(空间复杂度O(M),时间复杂度O(NM)或最坏O(NM))

额,Floyd空间复杂度是O(N的2方),时间复杂度是O(N的3方)。

如果你看不清楚上面的Floyd就看下面这个没有#define的。

void Floyd(){
for(i=;i<=n;i++)
for(j=;j<=n;j++)
for(k=;k<=n;k++)
if(a[i][j]>a[k][j]+a[i][k] && a[k][j]+a[i][k]>)
a[i][j]=a[k][j]+a[i][k];
}

应该没有人不知道a[i][j]干什么吧?

a是用来贮存最短路的。

最新文章

  1. 联合体union和大小端(big-endian、little-endian)
  2. SSI
  3. js里面获取三位不重复值
  4. SVN 外部引用(svn:externals)处理相似系统的公用代码
  5. ubuntu下格式化内存当硬盘使的小实验
  6. C++:用成员初始化列表对数据成员初始化
  7. 你想建设一个能承受500万PV/每天的网站吗?服务器每秒要处理多少个请求才能应对?
  8. 四、XML映射配置文件
  9. ie浏览器下input和select的上下居中问题!!!!
  10. Easyui + asp.net MVC 系列教程 完成登录
  11. Kindeditor JS 富文本编辑器图片上传指定路径
  12. HTML表单设计(上)
  13. C#面向对象方式设置、读取应用配置
  14. Java数据结构和算法 - 递归
  15. A.01.03-模块的输入—模拟量输入
  16. Servlet 快速开始 表单中文字段
  17. Django模版基本标签详解
  18. poj2728 Desert King【最优比率生成树】【Prim】【0/1分数规划】
  19. hdu4990矩阵快速幂
  20. jenkins轻松玩玩远程windows的进程

热门文章

  1. jquery表单验证源码
  2. jenkins+ant+jmeter接口自动化测试(持续构建)
  3. lnmp架构(第一篇)
  4. Angular中Constructor 和 ngOnInit 的本质区别
  5. Selenium常规操作---基于python
  6. cocoapods的安装和使用以及版本升级遇到的问题
  7. java 比较几种常见循环方式的优劣
  8. 垃圾收集器Serial 、Parallel、CMS、G1
  9. 浏览器控制台console的使用
  10. 图像处理:卷积模块FPGA 硬件加速