Java中的弗洛伊德(Floyd)算法

 更新时间:2024年01月15日 11:15:40   作者:Mu_Mu是一只小白  
这篇文章主要介绍了Java中的弗洛伊德(Floyd)算法,Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似,需要的朋友可以参考下

弗洛伊德Floyd算法

Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似。

该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。

Dijkstra算法是求一个出发节点到其他各节点的最短距离,而Floyd算法是求每个节点到其他个节点的最短距离

在这里插入图片描述

完整java代码:

package com.yg.algorithm;/*
@author  Mu_Mu
@date    2020/3/23  9:56
*/
public class FloydAlgorithm {
    private static final int MAX=10000;
    public static void main(String[] args) {
        char[] vertexs = {'A', 'B', 'C', 'D', 'E'};
        int[][] matrix = {{0, MAX, MAX, 5, 2}, {MAX, 0, 8, MAX, 3}
                , {MAX, 8, 0, MAX, 4}, {5, MAX, MAX, 0, 9},{2,3,4,9,0}};
        FGraph fGraph = new FGraph(vertexs, matrix);
        fGraph.floyd();
        fGraph.show();
    }
}
class FGraph {
    private char[]vertexs;//存放顶点
    private int [][]dis;//每个顶点之间的距离
    private int[][]pre;//存放前驱顶点
    public FGraph(char[] vertexs, int[][] dis) {
        this.vertexs = vertexs;
        this.dis = dis;
        pre=new int [vertexs.length][vertexs.length];
        //初始化前驱顶点
        for (int i = 0; i < vertexs.length; i++) {
            for (int j = 0; j < vertexs.length; j++) {
                pre[i][j]=i;
            }
        }
    }
    //弗洛伊德算法
    public void floyd() {
        int len=0;
        //i,遍历中间顶点,3层循环的意义就是j通过i到k
        for (int i = 0; i < vertexs.length; i++) {
            //j代表出发节点
            for (int j = 0; j < vertexs.length; j++) {
                //k代表终点顶点
                for (int k = 0; k < vertexs.length; k++) {
                    //记录j通过i到k的距离
                    len=dis[j][i]+dis[i][k];
                    //比较j通过i到k的距离是否小于j直接到k的距离
                    if (len < dis[j][k]) {
                        dis[j][k]=len;
                        pre[j][k]=pre[i][k];
                    }
                }
            }
        }
    }
    //打印图
    public void show() {
        for (int i = 0; i < vertexs.length; i++) {
            //打印前驱顶点
            for (int j = 0; j < vertexs.length; j++) {
                System.out.print(vertexs[pre[i][j]]+"  ");
            }
            System.out.println();
           //打印顶点之间的距离
                for (int k = 0; k < vertexs.length; k++) {
                    System.out.print(vertexs[i]+"到"+vertexs[k]+"的距离为:"+dis[i][k]+"  ");
                }
            System.out.println();
        }
        }
    }

到此这篇关于Java中的弗洛伊德(Floyd)算法的文章就介绍到这了,更多相关弗洛伊德Floyd算法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springboot配置nacos的实现示例

    springboot配置nacos的实现示例

    本文将介绍如何在Spring Boot中配置Nacos,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-09-09
  • java实现单链表中是否有环的方法详解

    java实现单链表中是否有环的方法详解

    本篇文章介绍了,用java实现单链表中是否有环的方法详解。需要的朋友参考下
    2013-05-05
  • Java中数组协变和范型不变性踩坑记录

    Java中数组协变和范型不变性踩坑记录

    数组的协变性来源于数组的一个优势,这篇文章主要给大家介绍了关于Java中数组协变和范型不变性踩坑的一些内容,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-02-02
  • Spring注解之@Conditional使用解析

    Spring注解之@Conditional使用解析

    这篇文章主要介绍了Spring注解之@Conditional使用解析,@Conditional注解可以说是SpringBoot的条件注解,表示组件只有在所有指定条件都匹配时才有资格注册,条件是可以在 bean 定义注册之前​​以编程方式确定的任何状态,需要的朋友可以参考下
    2024-01-01
  • JAVA之读取properties时路径的注意问题

    JAVA之读取properties时路径的注意问题

    这篇文章主要介绍了JAVA之读取properties时路径的注意问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • java中join方法的理解与说明详解

    java中join方法的理解与说明详解

    这篇文章主要给大家介绍了关于java中join方法的理解与说明的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 详解在Spring MVC中使用注解的方式校验RequestParams

    详解在Spring MVC中使用注解的方式校验RequestParams

    本篇文章主要介绍了详解在Spring MVC中使用注解的方式校验RequestParams ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • java实现Excel转换为图片

    java实现Excel转换为图片

    在实际开发过程中,经常会有这样的需求,需要将Excel表格或特定区域转换为图片,所以小编今天就来为大家介绍一下如何使用Java将Excel转化为图片吧
    2023-10-10
  • 浅谈Java常见的排序算法

    浅谈Java常见的排序算法

    今天给大家带来的是关于Java的相关知识,文章围绕着Java常见的排序算法展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Spring Cloud Admin健康检查 邮件、钉钉群通知的实现

    Spring Cloud Admin健康检查 邮件、钉钉群通知的实现

    这篇文章主要介绍了Spring Cloud Admin健康检查 邮件、钉钉群通知的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08

最新评论