【算法刷题】—7.25 Dijkstra 算法应用

发布于:2022-07-25 ⋅ 阅读:(471) ⋅ 点赞:(0)
  • ?‍♂️个人主页:杯咖啡
  • ?进步是今天的活动,明天的保证!
  • ✨目前正在学习:SSM框架,算法刷题
  • ?本文收录专栏 : 算法刷题
  • ?牛客网,刷算法过面试的神级网站,用牛客你也牛。 ?免费注册和我一起学习刷题?
  • ?希望大家多多支持?一起进步呀!
  • ?The man who fears losing has already lost.
    怕输的人已经输了。 - 《权力的游戏》

✨今日算法一题

网络延迟时间



网络延迟时间

题目描述

在这里插入图片描述在这里插入图片描述

思路详解

本题运用Dijkstra 算法。
根据题意,从节点 k 发出的信号,到达节点 x 的时间就是节点 k 到节点 x 的最短路的长度。因此我们需要求出节点 k 到其余所有点的最短路,其中的最大值就是答案。若存在从 k 出发无法到达的点,则返回 −1。

代码与结果

class Solution {
    public int networkDelayTime(int[][] times, int n, int k) {
        final int INF = Integer.MAX_VALUE / 2;
        int[][] g = new int[n][n];
        for (int i = 0; i < n; ++i) {
            Arrays.fill(g[i], INF);
        }
        for (int[] t : times) {
            int x = t[0] - 1, y = t[1] - 1;
            g[x][y] = t[2];
        }

        int[] dist = new int[n];
        Arrays.fill(dist, INF);
        dist[k - 1] = 0;
        boolean[] used = new boolean[n];
        for (int i = 0; i < n; ++i) {
            int x = -1;
            for (int y = 0; y < n; ++y) {
                if (!used[y] && (x == -1 || dist[y] < dist[x])) {
                    x = y;
                }
            }
            used[x] = true;
            for (int y = 0; y < n; ++y) {
                dist[y] = Math.min(dist[y], dist[x] + g[x][y]);
            }
        }

        int ans = Arrays.stream(dist).max().getAsInt();
        return ans == INF ? -1 : ans;
    }
}

在这里插入图片描述


✨总结

今天主要复习了Dijkstra 算法,这也是很重要的一个算法,也要注意练习哦!

原创不易,还希望各位大佬支持一下 \textcolor{blue}{原创不易,还希望各位大佬支持一下} 原创不易,还希望各位大佬支持一下

点赞,你的认可是我创作的动力! \textcolor{green}{点赞,你的认可是我创作的动力!} 点赞,你的认可是我创作的动力!

收藏,你的青睐是我努力的方向! \textcolor{green}{收藏,你的青睐是我努力的方向!} 收藏,你的青睐是我努力的方向!

评论,你的意见是我进步的财富! \textcolor{green}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到