LC1334. 阈值距离内邻居最少的城市

弗洛伊德算法,把所有节点之间的最短距离算出来。之后统计每个节点在阈值内可以到达的其他节点数,返回最小的哪个就是答案

def findTheCity(self, n, edges, distanceThreshold):
        INTMAX = 0x3f3f3f3f
        mp = [[INTMAX]*n for i in range(n)]
        for x,y,t in edges:                              #建立邻接表
            mp[x][y] = t 
            mp[y][x] = t 
        for k in range(n):                               #普通弗洛伊德
            for i in range(n):
                for j in range(n):
                    if mp[i][k] + mp[k][j] < mp[i][j]:
                        mp[i][j] = mp[i][k] + mp[k][j] 
        res = 0
        min = INTMAX
        for i in range(n):
            count = 0                                           
            for j in range(n):
                if i != j and mp[i][j] <= distanceThreshold:   #记录当前i节点可以到达的节点个数
                    count += 1
            if count <= min:                                   #找最小count对应的i,就是答案
                res = i
                min = count
        return res

你可能感兴趣的:(图,最短路径算法,图论,算法,leetcode)