算法思想:
将所有节点分成两类:已确定从起点到当前点的最短路长度的节点,以及未确定从起点到当前点的最短路长度的节点(下面简称「未确定节点」和「已确定节点」)。
每次从「未确定节点」中取一个与起点距离最短的点,将它归类为「已确定节点」,并用它「更新」从起点到其他所有「未确定节点」的距离。直到所有点都被归类为「已确定节点」。
用节点 A「更新」节点 B 的意思是,用起点到节点 A 的最短路长度加上从节点 A 到节点 B 的边的长度,去比较起点到节点 B 的最短路长度,如果前者小于后者,就用前者更新后者。
应用:
思路:从节点k出发,维护其它节点与起点k的路径数组,最后取该数组中的最大值即为所求。
class Solution {
public int networkDelayTime(int[][] times, int n, int k) {
final int INF=Integer.MAX_VALUE/2;
//邻接表建图
List<int[]>[] g=new List[n];
for(int i=0;i<n;i++){
g[i]=new ArrayList<int[]>();
}
for(int[]t:times){
int x=t[0]-1,y=t[1]-1;
g[x].add(new int[]{y,t[2]});