最短路径算法笔记
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