![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
最短路
magnte
这个作者很懒,什么都没留下…
展开
-
floyd模板
复杂度:n ^ 3模板题:给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,边权可能为负数。再给定 k 个询问,每个询问包含两个整数 x 和 y ,表示查询从点 x 到点 y 的最短距离,如果路径不存在,则输出 impossible。数据保证图中不存在负权回路。输入格式第一行包含三个整数 n,m,k 。接下来 m 行,每行包含三个整数 x,y,z ,表示存在一条从点 x 到点 y 的有向边,边长为 z 。接下来 k 行,每行包含两个原创 2021-08-12 17:44:08 · 261 阅读 · 0 评论 -
spfa判负环
由于进入负权环会一直循环,所以spfa判断负环只需加一个cnt数组记录它连的边数,对于每个点,只要他的边数大于等于n即说明图中存在负环。由于负环不一定存在在由1出发的点的集合,所以一开始入队需要将所有点入队。还有一点在判断负环中可以不需要初始化d数组原因:有负环的话相当于某些点到起点的距离为负无穷,然后SPFA算法是正确的,且初始时这些点的距离为0,0大于负无穷,所以一定会把这些距离为负无穷的点不断更新。模板题:给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可.原创 2021-08-12 17:38:41 · 207 阅读 · 0 评论 -
spfa算法模板
bellman-ford算法可以用来求带负权边的最短路,其中关键代码d[b] = min(d[b],backup[a] + w);,如果对于上一个循环,backup[a]未被更新,这一步也就不需要了。所以spfa是对bellman-ford算法的优化,思路是对于被更新了的点才进入队列。复杂度通常为 m ,但最坏时的复杂度仍然是 m * n模板题:给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走.原创 2021-08-12 17:02:08 · 431 阅读 · 0 评论 -
bellman-ford算法模板
bellman-ford用于求带有负权边的最短路模型复杂度为:n * m图中不能带有负权回路,否则往前更新时进入回路会在回路中一直循环更新。模板题:给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你求出从 1 号点到 n 号点的最多经过 k 条边的最短距离,如果无法从 1 号点走到 n 号点,输出 impossible。注意:图中可能 存在负权回路 。输入格式第一行包含三个整数 n,m,k。接下来 m 行,每行包含三个整数 x,y,z,表示存在一条.原创 2021-08-12 16:01:07 · 151 阅读 · 0 评论 -
dijkstra求最短路Ⅱ(堆优化)
由于dijkstra算法是一个一个找离集合最近的点并进入集合,所以可以直接用一个单调队列来进行优化。复杂度:mlogm 一共m条边,单调队列里取元素复杂度为logm。一般来说稠密图边数 m 是 n ^ 2 级别稀疏图边数 m 是 n 级别所以当图为稠密图时效率不如邻接矩阵版的dijkstra,一般用于稀疏图。模板题:给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为非负值。请你求出 1 号点到 n 号点的最短距离,如果无法从 1 .原创 2021-08-12 15:30:33 · 178 阅读 · 0 评论 -
dijkstra算法Ⅰ模板(邻接矩阵)
dijkstra算法用于单源最短路的计算,给定一个 n 个点 m 条边有(无)向图,可以计算 1 到其他任意一点的最短路径。复杂度:(O n ^ 2,由于使用邻接矩阵存储,所以空间复杂度也为O(n ^ 2),一般用于稠密图的单元最短路。不能用于计算带负权边的图原因:模板题:给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为正值。请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1 。输入格式第一.原创 2021-08-12 15:03:18 · 513 阅读 · 0 评论