随笔分类 - 图论之最短路径
包含了
朴素Dijkstra、堆优化Dijkstra、Bellman-ford、SPFA、Floyd的经典基础最短路算法
摘要:Shortest Path Fastest Algorithm (spfa) 单源最短路、存在负权边、常用来判断负环 这个算法因为与 Bellman-Ford 算法比较相似,只是在它的算法的基础上进行了队列优化,因此也被嘲讽为“队列优化的贝尔曼福德”。 就是每次可以更新到一个节点的最短距离的时候,我
阅读全文
摘要:思想基础 DP 求各顶点之间的最短路径 直接三重循环枚举所有点,允许所有点作为重点站 Floyd优缺点分析: 优点:比较容易容易理解,可以算出任意两个节点之间的最短距离,代码编写简单。缺点:时间复杂度比较高(n3),不适合计算大量数据,当数据稍微大点儿的时候就可以选择其他的算法来解决问题了,不然也会
阅读全文
摘要:适用于存在负权边,题目要求最短路不超过k条边,还可以检测是否存在回路 核心思想是 松弛操作(枚举所有边) 首先n次迭代,每一次循环所有边。我们这里用a,b,w表示存在一条从a走到b的边,权重是w。这里存边方式有很多种,可以用邻接表,结构体等。遍历所有边的时候更新一下其他点的距离,和Dijkstra算
阅读全文
摘要:Dijkstra依旧基于贪心 用堆排序动态维护剩余点中dist[] 最小的点 堆排序优化Dijkstra算法 稀疏图,用邻接表,稠密也可以 void add(int a,int b,int c) { e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++; } void
阅读全文
摘要:Dijkstra算法的思想是:设置两个顶点的集合S和U,集合S中存放已找到最短路径的顶点,集合U中存放当前还未找到最短路径的顶点。初始状态时,集合S中只包含源点,设为v0,然后从集合U中选择到源点v0路径长度最短的顶点u加入到集合S中,集合S中每加入一个新的顶点u都要修改源点v0到集合U中剩余顶点的
阅读全文