Java版-图论-最短路-Floyd算法

实现描述

网络延迟时间示例

根据上面提示,可以计算出,最大有100个点,最大耗时为100*wi,即最大的耗时为10000,任何耗时计算出来超过这个值可以理解为不可达了;从而得出实现代码里面的:

java 复制代码
int maxTime = 10005; //这里是题目给出的最大距离
  1. 定义数组wij=weight; 其中,表示从i->j需要耗时weight;
  2. 求解从k出发,到其他各个点的最短时间,需要算出从k出发到其余各个点的时间取最大值;
  3. 利用中间点middle,从i->j的距离,如果经过中间点middle,则wij=wimiddle+wmiddlej;
  4. 利用状态转移,可以dp出w的矩阵值,然后计算从k出发到各个点的时间,进而求出时间的最大值;

实现代码

java 复制代码
 public static void main(String[] args) {
//        int[][] times = {
//                {2, 1, 1},
//                {2, 3, 1},
//                {3, 4, 1}};
//        int n = 4; //4个节点
//        int k = 2; //从2

        int[][] times = {
                {1, 2, 1}};
        int n = 2; 
        int k = 2; 
        System.out.println(new Floyd().networkDelayTime(times, n, k));
    }


    int[][] matrix;

    public int networkDelayTime(int[][] times, int n, int k) {
        int result = -1;
        matrix = new int[n + 1][n + 1];
        int maxTime = 10005; //这里是题目给出的最大距离
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                if (i == j) {
                    matrix[i][j] = 0;
                } else {
                    matrix[i][j] = maxTime;
                }
            }
        }
        //初始化矩阵实际值
        for (int[] time : times) {
            int from = time[0], to = time[1];
            matrix[from][to] = time[2];
        }
        floydAlgorithm(n, matrix);
        for (int i = 1; i <= n; i++) {
            result = Math.max(result, matrix[k][i]);
        }
        return result >= maxTime ? -1 : result;
    }

    void floydAlgorithm(int n, int[][] matrix) {
        for (int middle = 1; middle <= n; middle++) {  //中转点
            for (int i = 1; i <= n; i++) { //起点
                for (int j = 1; j <= n; j++) { //终点
                    matrix[i][j] = Math.min(matrix[i][j], matrix[i][middle] + matrix[middle][j]);
                }
            }
        }
    }
相关推荐
wuqingshun3141592 小时前
MYSQL的乐观锁和悲观锁是什么?
java
Jerry2 小时前
LeetCode 101. 对称二叉树
算法
唐青枫3 小时前
Java SLF4J 实战指南:从日志门面到 Logback、MDC 和链路追踪
java
jvmind_dev3 小时前
Java GC 实战指南(番外篇):被忽视的隐形杀手 —— Class Unloading 如何拖垮 GC
java·后端
可编程芯片开发3 小时前
基于MPPT最大功率跟踪的离网光伏发电系统Simulink建模与仿真
算法
An_s3 小时前
机器学习python之识别图中物品信息
java·linux·开发语言
AI科技星3 小时前
线性算子不是空间映射函数,是全域双螺旋场之间拉伸、旋转、耦合、坍缩的跨空间标准化变换载体《全域数学vs传统数学:人类文明进阶200讲》第80讲
线性代数·算法·矩阵·数据挖掘·回归·乖乖数学·全域数学
米罗篮3 小时前
矩阵快速幂 (Exponentiation By Squaring Applied To Matrices)
c++·线性代数·算法·矩阵
dream_home84073 小时前
图像算法模型NPU适配与算法服务实战指南
人工智能·python·算法·npu 图像服务
AIGS0014 小时前
跨越语义鸿沟:企业本体语义平台的构建与落地
java·人工智能·python·机器学习·人工智能ai大模型应用