码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-01-30 22:44:10      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:最短路径   jks   str   image   class   就是   描述   ndt   width   

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

标签:最短路径   jks   str   image   class   就是   描述   ndt   width   

原文地址:https://www.cnblogs.com/hyserendipity/p/12244208.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!