动态规划(Dynamic Programming)是求解决策过程(decision process)最优化的数学方法。它的名字和动态没有关系,是Richard Bellman为了唬人而取的。 动态规划主要用于解决包含重叠子问题的最优化问题,其基本策略是将原问题分解为相似的子问题,通过求解并保存重复子 ...
分类:
移动开发 时间:
2017-11-29 17:02:18
阅读次数:
285
当我们使用BellmanFord算法时可以了解到,当我们第一次遍历时松弛的边是从源点可以直接到达的边,接着再从这些顶点可以直接到达的边进行松弛,以此类推。 所以基于以上思想我们可以去除BellmanFord算法中的无效循环。 首先我们可以选择使用连个数组first和next,first用于记录每条边 ...
分类:
其他好文 时间:
2017-11-19 22:12:31
阅读次数:
197
该算法详解请看 https://www.cnblogs.com/tanky_woo/archive/2011/01/17/1937728.html 单源最短路 当图中存在负权边时 迪杰斯特拉就不能用了 该算法解决了此问题 时间复杂度O(nm) 注意 图中含有负圈时不成立。当判定存在负圈时,这只说明s ...
分类:
其他好文 时间:
2017-11-10 00:28:47
阅读次数:
215
题意 : 给出一个有向图、求起点 s 到终点 t 的第 k 短路、不存在则输出 -1 #include<stdio.h> #include<string.h> #include<queue> #include<algorithm> using namespace std; const int INF ...
分类:
编程语言 时间:
2017-11-07 22:02:21
阅读次数:
166
最短路径 :虽然做过很多次最短路的题,spfa,bellman,floyd都用过不少。但是题目强调的“顺序”又让我加深了对最短路的理解。 当然,主要还是练习下STL: pair型: struct型 ...
分类:
其他好文 时间:
2017-11-04 20:53:35
阅读次数:
232
题意:给出 n 个点 m 条有向边,要求选出一个环,使得这上面 点权和/边权和 最大。 析:同样转成是01分数规划的形式,F / L 要这个值最大,也就是 G(r) = F - L * r 这个值为0时,r 的值,然后对于 F > 0,很明显是 r 太小,但是不好判断,把这个值取反,这样的话就能用B ...
分类:
其他好文 时间:
2017-10-30 19:53:24
阅读次数:
219
题目链接: http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_1_B Single Source Shortest Path (Negative Edges) Input An edge-weighted graph G (V, ...
分类:
编程语言 时间:
2017-10-25 00:51:33
阅读次数:
328
题目链接:http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_1_C All Pairs Shortest Path Input An edge-weighted graph G (V, E). |V| is the number ...
分类:
编程语言 时间:
2017-10-25 00:38:34
阅读次数:
369
Bellman-ford 算法适用于含有负权边的最短路求解,复杂度是O( VE ),其原理是依次对每条边进行松弛操作,重复这个操作E-1次后则一定得到最短路,如果还能继续松弛,则有负环。这是因为最长的没有环路的路,也只不过是V个点E-1条边构成的,所以松弛E-1次一定能得到最短路。因此这个算法相比 ...
分类:
编程语言 时间:
2017-10-19 00:18:05
阅读次数:
339
最短路最常用的算法有: 单源最短路: Bellman-Ford 算法,Dijkstra 算法,SPFA 算法。 任意两点间最短路:Floyd算法。 Bellman-Ford 可以处理有负边的情况,也可以处理负圈。最多进行V - 1次迭代操作,如果第V次还进行更新操作,说明存在负圈。 Dijkstra ...
分类:
其他好文 时间:
2017-10-11 23:38:47
阅读次数:
168