Floyd-Warshall算法是解决任意两点间的最短路径的一种算法,可以正確处理有向图或负权的最短路径问题。当然这个问题也可以对每个顶点使用单源最短路径算法来求解,但Floyd-Warshall算法的形式更为简单。在此算法中采用图的邻接矩阵方式计算和理解起来会很简单。

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

设D i,j,k为从i到j的只以(1..k)集合中的节点为中间節点的最短路径的长度。

1.若最短路径经过点k,则D i,j,k = D i,k,k ? 1 + D k,j,k ? 1;

2.若最短路径不经过点k,则D i,j,k = D i,j,k ? 1。

因此,D i,j,k = min(D i,k,k ? 1 + D k,j,k ? 1,D i,j,k ? 1)。

java的实现如下(以有向图为例,图结构采用邻接矩阵):

还是先定义顶点和边:

public class Edge {

int weight;

Vertex start;

Vertex end;

public Edge(Vertex a, Vertex b, int w) {

start = a;

end = b;

weight = w;

}

}

public class Vertex {

String key;

public Vertex(String k) {

key = k;

Floyd_Warshall.i++;

Floyd_Warshall.vertexList.add(this);

}

}

然后是Floyd_Warshall算法的核心:

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

用Java编辑实现warshall算法_warshall算法 java实现相关推荐

  1. 插入排序算法 java_排序算法实现-插入排序(Java版本)

    原标题:排序算法实现-插入排序(Java版本) 插入排序(英语:Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到 ...

  2. 取名算法之用JAVA实现姓名测试

    名字很重要吗 一文中我谈到了名字的重要性. 作为易学高手的我(大师♂罗莊)对告诉各位码农如何制作取名系统  负有不可推卸的责任. 本次课程没有什么难度,就是根据名字笔画来计算天地人三才格 笔画的五行算 ...

  3. Java折半二叉树,成都汇智动力-Java实现常用排序算法

    原标题:成都汇智动力-Java实现常用排序算法 排序算法介绍 1. 基本概念 稳定性: 待排序的数列中,若两个元素的值相等 R1 = R2 ,在排序结束之后,元素之间的相对位置没有发生变化,则称排序算 ...

  4. java快排算法解读,java 快排的思路与算法

    java 快排的思路与算法 有时候面试的时候的会问道Arrays.sort()是怎么实现的,我以前根本不知道是什么东西,最近点进去看了一下.直接吓傻, //看到这个时候还是比较淡定的,可怕的事情来了. ...

  5. java常用的7大排序算法汇总

    这段时间闲了下来,就抽了点时间总结了下java中常用的七大排序算法,希望以后可以回顾! 1.插入排序算法 插入排序的基本思想是在遍历数组的过程中,假设在序号 i 之前的元素即 [0..i-1] 都已经 ...

  6. java和c 的rsa加密算法_RSA算法签名技术Java与C++统一(加密解密结果一样)

    RSA算法签名技术Java与C++统一 (加密解密结果一样) 源代码下载地址:http://www.doczj.com/doc/64f44a94a0116c175f0e484d.html/produc ...

  7. 基数排序算法(基于Java实现)

    title: 基数排序算法(基于Java实现) tags: 基数算法 基数排序算法原理及代码实现: 一.基数排序算法的原理 基数排序属于"分配式排序",又称"桶子法&qu ...

  8. 选择排序算法(基于Java实现)

    title: 选择排序算法(基于Java实现) tags: 选择算法 选择排序算法原理及代码实现: 一.选择排序算法的原理 选择排序算法的实现思路有点类似插入排序,也分已排序区间和未排序区间.但是选择 ...

  9. 插入排序算法(基于Java实现)

    title: 插入排序算法(基于Java实现) tags: 插入算法 插入排序算法原理及代码实现: 一.插入排序算法的原理 首先,我们将数组中的数据分为两个区间,已排序区间和未排序区间.初始已排序区间 ...

最新文章

  1. 好好学python · 字典
  2. eclipse build path 以及 clean(转)
  3. python json unicode_python2下解决json的unicode编码问题
  4. BurpSuite插件 -- Struts2-RCE
  5. 论文浅尝 | 基于Freebase的问答研究
  6. 6.6.2赫夫曼编码
  7. VisualStudio解决方案配置Debug和Release选项
  8. 一年前3-1对应阿里P7,贬值得有点快,但说对标好像差点意思...
  9. 爬虫案例:利用python爬虫关键词批量下载高清大图
  10. 公交车上应不应该给老人让座?
  11. Exynos4412开发板更换开机logo图片
  12. 2019-11-20 git提交日志中附加的贡献者签名
  13. java 多线程操作List,已经做了同步synchronized,还会有ConcurrentModificationException,知道为什么吗?...
  14. 概率图模型--马尔可夫随机场
  15. 单职业传奇私脱机辅助制作视频教程
  16. 内存颗粒和闪存颗粒的区别_内存颗粒及频率知识,你真的清楚吗?
  17. 张伯旭:北京亦庄着力打造中国云产业园
  18. SOLIDWORKS如何自动生成图纸
  19. COBOL中的基本语法(转)
  20. SkinSharp(Skin#)软件换肤库!

热门文章

  1. 获取日志的等级_进阶之路:Java 日志框架全画传(中)
  2. webService(简单小demo)
  3. C#编写程序监测某个文件夹内是否有文件进行了增,删,改的动作?
  4. JavaScript判断访问终端
  5. Delphi的文件操作
  6. javascript如何用户的判断操作系统
  7. ASP.NET版在线客服系统源码 带服务端
  8. linux 搭建go编译环境搭建,linux上搭建完整go语言vim开发环境
  9. ef设置非自增长id_今日学习必备:分布式系统全局唯一ID你懂吗?
  10. 打造一个实际的全系统污点分析系统--Towards Practical Taint Tracking