
思路
Flyod 求所有点对之间的最短路,然后 $O(n^2)$ 暴力求解每个点的情况,与全局的 minCount对比并更新结果即可。
AC code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| const int inf = 0x3f3f3f3f;
class Solution { public: vector<vector<int>> dp; int findTheCity(int n, vector<vector<int>>& edges, int distanceThreshold) { dp.resize(n, vector<int>(n, inf)); for(int i = 0; i < n; i++) dp[i][i] = 0; for(auto e : edges){ int a = e[0], b = e[1], c = e[2]; dp[a][b] = dp[b][a] = c; } for(int k = 0; k < n; k++){ for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j]); } } } int idx, mincnt = inf; for(int i = 0; i < n; i++){ int cnt = 0; for(int j = 0; j < n; j++){ if(i != j && dp[i][j] <= distanceThreshold){ cnt++; } } if(cnt <= mincnt){ mincnt = cnt; idx = i; } } return idx; } };
|