基础
刷题
- 软件构建
记录一个标准思路,比自己写的要更加清晰,
主要是利用inDegree数组记录每一个节点的入度,每一次完成一个节点,就将节点被依赖的节点入度-1,并将入度为0的节点放入队列中。
这里使用邻接表,而不是邻接矩阵,是因为这是一个稀疏图,点多边少,每一次遍历不需要遍历所有节点到当前节点的边。
- 参加科学大会
dijkstra算法 (迪杰斯特拉)三部曲:(和prim算法很像)
- 找到离源节点最近的节点,且没有被访问过
- 标记为访问过
- 更新每个节点到达源节点的最短距离
总结
dijkstra算法 和 prim算法的区别
dijkstra算法是计算 每个节点到源节点的最短路径,从中找到最小的那一个去访问
prim算法是计算 每个节点到 最小生成树的最短路径,从中找到最小的那一个去访问
使用dijkstra算法 图中边的权值可以有负数吗?
不行,dijkstra 算法是计算 从源节点到 该节点的最短路径,一开始会找距离最短那一个,如果这个节点处于环中,且权值都是负数就错了。他会无限小。
使用 prim 算法 图中的边的权值可以有负数吗?
可以,因为prim算法,是计算节点距离生成树的最短距离,本质只会比较一个边,不会累加
如何输出 参加科学大会 这道题的路径
需要定义一个新的数组,记录每一个节点path = make([]int),记录从s车站到e车站。
当节点的minDist被更新,
如何debug dijkstra 算法
打印 minDist 数组