题目:743. 网络延迟时间
图的实战
这道题是找一条最长时间的路径。
一、猜想:dfs是否可行
把它理解为一个有向图,找出时间最长路径,但是有一个问题,题目给出的数据结构是数组,没有二叉树和图的关系结构,所以在dfs时会碰到如何用代码实现深度搜索各条路径的问题。
二、图的复习
图分为无向图和有向图。
2.1邻接表和邻接矩阵
两种常用的存储方式。
2.2迪杰斯特拉算法
用于求最短路径。
每次遍历到起始点距离最近且未访问过的顶点的邻接节点,直到拓展到终点为止。
提示引入数组,找最短路径。不断更新数组中到达各节点的最短距离,找到一个后再去以找到的节点为起始点去更新数组,找下一个最短距离。
三、实战代码
3.1邻接矩阵+迪杰斯特拉算法
借鉴了大佬的写法。
class Solution {
public int networkDelayTime(int[][] times, int n, int k) {
//INF表示 图中的无穷,就是不可达。
final int INF = Integer.MAX_VALUE / 2;
// 邻接矩阵存储边信息
// g为邻接矩阵
/*
y\x 0 1 2 3 4 5
0 INF
1 INF
2 INF
3 INF
4
5
*/
int[][] g =