最短路径 floyd/dijkstra-Find the City With the Smallest Number of Neighbors at a Threshold Distance(示例代码

Posted hyserendipity

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最短路径 floyd/dijkstra-Find the City With the Smallest Number of Neighbors at a Threshold Distance(示例代码相关的知识,希望对你有一定的参考价值。

2020-01-30 22:22:58

问题描述

技术图片

技术图片

技术图片

问题求解

解法一:floyd

这个题目一看就是floyd解最合适,因为是要求多源最短路,floyd算法是最合适的,时间复杂度为O(n ^ 3)。

    int inf = (int)1e9;
    
    public int findTheCity(int n, int[][] edges, int distanceThreshold) {
        int[][] dp = new int[n][n];
        for (int i = 0; i < n; i++) Arrays.fill(dp[i], inf);
        for (int i = 0; i < n; i++) {
            dp[i][i] = 0;
        }
        for (int[] edge : edges) {
            int u = edge[0];
            int v = edge[1];
            int d = edge[2];
            dp[u][v] = d;
            dp[v][u] = d;
        }
        for (int k = 0; k < n; k++) {
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    if (dp[i][j] > dp[i][k] + dp[k][j]) {
                        dp[i][j] = dp[i][k] + dp[k][j];
                    }
                }
            }
        }
        List<int[]> note = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            int cnt = 0;
            for (int j = 0; j < n; j++) {
                if (dp[i][j] <= distanceThreshold) cnt += 1;
            }
            note.add(new int[]{i, cnt});
        }
        Collections.sort(note, new Comparator<int[]>(){
            public int compare(int[] o1, int[] o2) {
                return o1[1] == o2[1] ? o2[0] - o1[0] : o1[1] - o2[1];
            }
        });
        return note.get(0)[0];
    }

 

以上是关于最短路径 floyd/dijkstra-Find the City With the Smallest Number of Neighbors at a Threshold Distance(示例代码的主要内容,如果未能解决你的问题,请参考以下文章

算法导论——单元最短路径

求图中任意两点之间最短路径有啥算法?

最短路径问题

最短路径 深入浅出Dijkstra算法(一)

计算机网络的最短路径算法都有哪些?对应哪些协议?

干货最短路径问题