题目:
1334. 阈值距离内邻居最少的城市
有 n
个城市,按从 0
到 n-1
编号。给你一个边数组 edges
,其中 edges[i] = [fromi, toi, weighti]
代表 fromi
和 toi
两个城市之间的双向加权边,距离阈值是一个整数 distanceThreshold
。
返回能通过某些路径到达其他城市数目最少、且路径距离 最大 为 distanceThreshold
的城市。如果有多个这样的城市,则返回编号最大的城市。
注意,连接城市 i 和 j 的路径的距离等于沿该路径的所有边的权重之和。
解答:
代码:
class Solution {
public int findTheCity(int n, int[][] edges, int distanceThreshold) {
int[] ans={Integer.MAX_VALUE/2,-1};
int[][] mp=new int[n][n];
for(int i=0;i<n;i++){
Arrays.fill(mp[i],Integer.MAX_VALUE/2);
}
for(int[] eg:edges){
int from=eg[0],to=eg[1],weight=eg[2];
mp[from][to]=mp[to][from]=weight;
}
for(int k=0;k<n;k++){
mp[k][k]=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
mp[i][j]=Math.min(mp[i][j],mp[i][k]+mp[k][j]);
}
}
}
for(int i=0;i<n;i++){
int cnt=0;
for(int j=0;j<n;j++){
if(mp[i][j]<=distanceThreshold){
cnt++;
}
}
if(cnt<=ans[0]){
ans[0]=cnt;
ans[1]=i;
}
}
return ans[1];
}
}