图论
文章平均质量分 64
gotojava9
这个作者很懒,什么都没留下…
展开
-
Bellman-Ford 算法 & SPFA(单源最短路问题)
一、Bellman-Ford算法Bellman-Ford 算法是单源最短路问题的一种算法,相比 Dijkstra 算法,它可以处理含有负权回路(也叫负权环,negative cycles)的图。 Dijkstra 算法以贪心法选取未被处理的具有最小权值的节点,然后对其的出边进行松弛操作; 而 Bellman-Ford 算法简单地对所有边进行松弛操作,共|V| − 1次,其中 |V|是图的点原创 2016-01-03 14:27:18 · 522 阅读 · 0 评论 -
Floyd-Warshall算法 (任意两点间的最短路问题)
这个算法本质上就是动态规划。 首先我们给有V个顶点的图每个顶点标号0~V-1,则设d[k][i,j]为点i到点j的路径中标号最大(不包括i和j)的点为k,则可得状态转移方程 d[k][i,j] = min(d[k-1][i,k]+d[k-1][k,j], d[k-1][i,j]).#include <fstream>#include <algorithm>using namespace st原创 2015-12-27 11:11:03 · 889 阅读 · 0 评论 -
Dijkstra算法(单源最短路问题)
先写一点哈~~这个算法是通过为每个顶点 v 保留目前为止所找到的从 s 到 v 的最短路径来工作的。 初始时,原点 s 的路径长度值被赋为 0 (d[s] = 0),若存在能直接到达的边 (s, m),则把d[m]设为w(s, m),同时把所有其他 s 不能直接到达的顶点的路径长度设为无穷大,即表示我们不知道任何通向这些顶点的路径(对于 V 中所有顶点 v 除 s 和上述 m 外 d[v] = ∞原创 2016-05-07 21:33:06 · 677 阅读 · 0 评论 -
Kruskal 算法(最小生成树)
原理1、将G所有条边按权从小到大排序,MST开始为空。 2、从小到大次序取边(x,y)。 3、若加入边(x,y),MST就有环,则放弃此边,转(2)。 4、将边(x,y)加入MST,如果已经加了n-1条边,结束。否则转(2)。实现方法最容易想到的方法是暴力,但用并查集的实现则更简洁高效,时间复杂度大约为O(|E|log2|E|+α*|V|)。原创 2016-01-21 22:54:53 · 861 阅读 · 0 评论