求解到所有路径的最短路=》弗洛伊德最短路方法
class Solution {
public:
// Flody -> 找到任意两点之间的最短路径
int findTheCity(int n, vector<vector<int>>& edges, int distanceThreshold) {
vector<int> temp(n, 1e9);
vector<vector<int>> dp(n, temp);
for(int i=0;i<n;i++){
dp[i][i] = 0;
}
for(int i=0;i<edges.size();i++){
vector<int> edge = edges[i];
dp[edge[0]][edge[1]] = edge[2];
dp[edge[1]][edge[0]] = edge[2];
}
// starting flody
while(1){
int changeflag = 0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
// update dp[i][j]
for(int k=0;k<n;k++){
int dis = dp[i][k]+dp[k][j];
if (dis<dp[i][j]){
dp[i][j] = dis;
changeflag = 1;
}
}
}
}
if (changeflag==0){break;}
}
// then count for each points
int mincount = 1e9+7;
int minval = -1;
for(int i=0;i<n;i++){
// gain res for i
int count = 0;
for(int j=0;j<n;j++){
if (j!=i&&dp[i][j]<=distanceThreshold){
count++;
}
}
//cout<<i<<" "<<count<<endl;
if (count<=mincount){
mincount = count;
minval = i;
}
}
return minval;
}
};