Floyd,动态规划,dist[i][j]表示从i到j且路径只经过1到k-1点的最短距离。
class Solution {
public:
int findTheCity(int n, vector<vector<int>>& edges, int distanceThreshold) {
int dist[105][105];
memset(dist,-1,sizeof(dist));
for(int i=0;i<edges.size();i++){
int u=edges[i][0];
int v=edges[i][1];
int w=edges[i][2];
dist[u][v]=w;
dist[v][u]=w;
}
for(int k=0;k<n;k++){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==j)
continue;
if(dist[i][k]==-1 || dist[k][j]==-1)
continue;
if(dist[i][j]==-1)
dist[i][j]=dist[i][k]+dist[k][j];
else
dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j]);
}
}
}
int min_count=INT_MAX;
int u=0;
for(int i=0;i<n;i++){
int count=0;
for(int j=0;j<n;j++){
if(dist[i][j]!=-1 && dist[i][j]<=distanceThreshold){
count++;
if(count>min_count)
break;
}
}
if(count<=min_count){
min_count=count;
u=i;
}
}
return u;
}
};