上次我们学习了Dijkstra,其有一个不错的时间复杂度上限:O(n log n),但其对于负权边的处理会出错啦 一个简单的小例子: 这个图中如果我们发现以3号点为原点,跑一边dijkstra的话 我们先会取2号点进入原点集合,再取一号点。这样得到的dist[2]=3,dist[1]=4 错! 我们 ...
分类:
其他好文 时间:
2017-06-10 20:26:38
阅读次数:
143
链接:poj 1860 题意:给定n中货币。以及它们之间的税率。A货币转化为B货币的公式为 B=(V-Cab)*Rab,当中V为A的货币量, 求货币S通过若干此转换,再转换为原本的货币时是否会添加 分析:这个题就是推断是否存在正权回路。能够用bellman-ford算法,只是松弛条件相反 也能够用S ...
分类:
其他好文 时间:
2017-06-09 13:17:49
阅读次数:
147
3.1最短路之单源最短路(SPFA) 松弛:常听人说松弛,一直不懂,后来明白其实就是更新某点到源点最短距离。 邻接表:表示与一个点联通的所有路。 如果从一个点沿着某条路径出发,又回到了自己,而且所经过的边上的权和小于0, 就说这条路是一个负权回路。 回归正题,SPFA是bellman-ford的一种 ...
分类:
编程语言 时间:
2017-06-06 14:17:56
阅读次数:
237
Bellman-Ford算法 Bellman-Ford是一种容易理解的单源最短路径算法, Bellman-Ford算法需要两个数组进行辅助: dis[i]: 存储顶点i到源点已知最短路径 path[i]: 存储顶点i到源点已知最短路径上, i的前一个顶点. 若图有n个顶点, 则图中最长简单路径长度不 ...
分类:
编程语言 时间:
2017-06-05 23:42:52
阅读次数:
318
1、bellman-ford算法 对每条边松弛|V|-1次。 运行结果如下: (实现的例子) 2、All-pairs shortest path (choose one from the three algorithms) (实现的例子) 运行结果: 3、8-queen problem (back ...
分类:
编程语言 时间:
2017-05-29 16:36:01
阅读次数:
312
洛谷——P3385 【模板】负环 题目描述 暴力枚举/SPFA/Bellman-ford/奇怪的贪心/超神搜索 输入输出格式 输入格式: 第一行一个正整数T表示数据组数,对于每组数据: 第一行两个正整数N M,表示图有N个顶点,M条边 接下来M行,每行三个整数a b w,表示a->b有一条权值为w的 ...
分类:
其他好文 时间:
2017-05-20 22:37:26
阅读次数:
228
https://www.luogu.org/problem/show?pid=3385#sub 题目描述 暴力枚举/SPFA/Bellman-ford/奇怪的贪心/超神搜索 输入输出格式 输入格式: 第一行一个正整数T表示数据组数,对于每组数据: 第一行两个正整数N M,表示图有N个顶点,M条边 接 ...
分类:
其他好文 时间:
2017-05-20 18:58:52
阅读次数:
246
适用范围:给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了。 我们约定有向加权图G不存在负权回路,即最短路径一定存在。当然,我们可以在执行该算法前做一次拓扑排序,以判断是否存在负权回路,但这不是我们讨论的重点。 ...
分类:
其他好文 时间:
2017-05-20 12:27:57
阅读次数:
268
1、对每条边松弛|V|-1次2、解决单源最短路径问题3、一般情况,变得权重可以为负4、时间复杂度O(V*E)伪码:BELLMAN-FORD(G,w,S)INITIALIZE-SINGLE-SOURCR(G,S)1、初始化所有节点fori=1to|G.V|-12、进行循环foreachedge(u,v)属于G.ERELAX(u,v,w)对每条边都进行一次松弛foreache..
分类:
其他好文 时间:
2017-05-12 09:36:17
阅读次数:
134
这一篇博客以一些OJ上的题目为载体。整理一下最短路径算法。会陆续的更新。。。 一、多源最短路算法——floyd算法 floyd算法主要用于求随意两点间的最短路径。也成最短最短路径问题。 核心代码: /** *floyd算法 */ void floyd() { int i, j, k; for (k ...
分类:
编程语言 时间:
2017-05-03 20:34:45
阅读次数:
323