分析:从k结点传输到所有结点的时间 = max(k到1结点所需最短时间,k到2结点所需最短时间…从k到n所需最短时间),因为传输是同时的,所以这道题就转换为图的最短路径问题
先用Disjkstra算法求出各个点到k的最短距离,然后求出这些距离中的最大值
int networkDelayTime(vector<vector<int>>& times, int n, int k){
queue<int> myQue; //此队列用于即将访问的结点
vector<int> distTok(n + 1, INT_MAX); //数组distTok表示k到点index的最短距离
vector<vector<int> > graph(n + 1, vector<int>(N + 1, -1)); //邻接矩阵
for(auto &time : times){
//构建邻接矩阵
graph[time[0]][time[1]] = time[2];
}
myQue.push(k);
distTok[k] = 0; //k到自己的距离为0
//开始搜索各个点到k的最短距离
while(!myQue.empty()){
int front = myQue.front();
myQue.pop();
//利用当前front结点,尝试结点k到所有结点的最短距离
for(int target = 1; target <= N; ++target){
if(graph[front][target] != -1 && distTok[front] + graph[front][target] < distTok[target]){
distTok[target] = distTok[front] + graph[front][target];
myQue.push(target);
}
}
}
//寻找点k到各个点的最短距离的最大值
int maxRes = 0;
for(int i = 1; i <= N; i++){
maxRes = max(maxRes, distTok[i]);
}
return maxRes == INT_MAX? -1 : maxRes;
}
int mai