最短路径算法笔记
public int networkDelayTime(int[][] times, int N, int K) {
int[] dist = new int[N+1];
for (int i=0;i<N+1;i++){
dist[i] = Integer.MAX_VALUE;
}
dist[K]=0;
for (int i=0;i<N;i++){
for (int j=0;j<times.length;j++){
int u = times[j][0];
int v = times[j][1];
int w = times[j][2];
if(dist[u]!=Integer.MAX_VALUE&&dist[v]>dist[u]+w){
dist[v]=dist[u]+w;
}
}
}
int res = 0;
for (int i=1;i<dist.length;i++){
if(res<dist[i])res = dist[i];
}
return res == Integer.MAX_VALUE ? -1 : res;
}
//Bellman-Ford每次找到更新后的点,实际上到不了N次就收敛了,若还不收敛说明有负权回路,不是从源头开始迭代,松弛时不确保父节点已确定,因此做了很多无用功
//SPFA加入队列,从源头开始迭代,松弛时不确保父节点已确定,将松弛后的点入队
//Dijstra从源头开始迭代,找邻接点
//Floyd矩阵表示,思想同Bellman-Ford

浙公网安备 33010602011771号