介绍:

  是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权(但不可存在负权回路)的最短路径问题,同时也被用于计算有向图的传递闭包。

  Floyd-Warshall算法的时间复杂度是O(N3),空间复杂度O(N2)。

原理:

  Floyd-Warshall算法的原理是动态规划。

  用fk(i,j)表示从 i 到 j 只以(1...k)集合中的节点为中间节点的最短距离,这样从fk-1(i,j)推出fk(i,j)就很容易了。

  1° 若最短路径经过点k,fk(i,j) = fk-1(i,k) + fk-1(k,j)

  2° 若最短路径不经过点k,fk(i,j) = fk-1(i,j)

  因此fk(i,j) = min(fk-1(i,j)  ,  fk-1(i,k) + fk-1(k,j))。

  在实际算法中,为了节约空间,可以直接在原来空间上进行迭代,这样空间可降至二维。

算法描述:

  

其他作用:

  在有向图中,有时不必关心路径的长度,而只关心每两点间是否有通路,则可以用1和0分别代表“连通”和“不连通”。这样除了预处理需要做少许调整外,主算法只需把“d[i][j] = min( d[i][j] , d[i][k] + d[k][j] )”改成“d[i][j] = d[i][j] || (d[i][k] && d[k][j])”。这样的结果称为有向图的传递闭包。

  还可以求最小环。

最新文章

  1. java io流之字符流
  2. 关于网络爬虫项目的项目建议(NABCD)
  3. (6)java的内存泄露问题
  4. ansible定时任务模块和用户组模块使用
  5. SpringAOP 基础具体解释
  6. 使用 GIT 获得Linux Kernel的代码并查看,追踪历史记录
  7. centos 安装ecshop出现date错误
  8. List中toArray()的使用方法
  9. python-摩斯码转换
  10. Left/Right/Inner Join用法和区别
  11. hdu5303Delicious Apples
  12. Android进阶(十四)Android Adapter详解
  13. .NET Core到底有多强?
  14. Windows 10 安装 Mongod
  15. Java实现二叉树的前序、中序、后序、层序遍历(递归方法)
  16. MongoDB pymongo模块
  17. Json 操作
  18. 在ASP.NET MVC中实现Select多选
  19. Xeon Phi 编程备忘
  20. UNIX环境高级编程 第1章 UNIX基础知识

热门文章

  1. 牛客 - 700I - Matrix Again - 二维RMQ - 二分
  2. 阿里云的opensearch
  3. 436. Find Right Interval
  4. POJ3734【状压枚举】
  5. 2016CCPC东北地区大学生程序设计竞赛
  6. atcoder#073D(枚舉)
  7. Node.js 使用Stream的pipe(管道)方法实现文件复制
  8. web框架原理,http 协议
  9. 织梦cms 应急响应 修复建议
  10. XHTML学习笔记 Part2:核心元素