图论
文章平均质量分 78
CFhM_R
所谓的光辉岁月,不是那些闪亮的日子,而是无人问津时,你对梦想的坚持
展开
-
【算法】链式前向星的静态链表实现
我们都知道图的存储有两种方法,邻接矩阵以及邻接表,邻接矩阵是将每一对点之间是否存在边以及边的权值记录下来,优点是可以快速的访问任意两点之间的边,但是缺点是对空间的消耗太大,适用于点不太多的稀疏图;而邻接表则是采用类似链表的方式 ,以每个点为头节点来记录从该点出发的所有边,这样的好处是减少了很多的无谓消耗,每一次的存储都是有意义的,但是缺点是遇到一条边只能去遍历它的起点所在的链表来找到这条边,也就是原创 2016-03-01 12:30:24 · 1790 阅读 · 0 评论 -
【算法】全局最短路——Floyd-Warshall算法
给定一张图,该如何确定图中任意两点间的最短距离呢?我们先想想通常的做法。在一个有n个点的图中,任意两点间的最短距离的步数(经过一个点算一步)一定不超过n,也就是说把n个点每个点经过一次,那么我们来想这样一个算法,每次枚举i到 j经过的步长,从1到n,最后的结果就是比较这些步数对应的值的最小值,就是i到j的最短距离。实现起来也很简单,来考虑矩阵的乘法 ,我们把所有的加法变成取最小值,乘法变成加法原创 2016-03-01 17:00:40 · 1558 阅读 · 0 评论 -
【算法】单源最短路——Dijkstra
对于固定起点的最短路算法,我们称之为单源最短路算法。单源最短路算法很多,最常见的就是dijkstra算法。dijkstra主要用的是一种贪心的思想,就是说如果i...s...t...j是最短路,那么i和j之间的任意两点s,t之间也一定是最短路,非常好证,如果s,t之间不是最短路,那么必然存在最短路,那么i到j也不是最短路造成了矛盾。而dijkstra就是运用这样的思想,把起点首先放进一个集原创 2016-03-01 23:36:20 · 3236 阅读 · 0 评论 -
【算法】单源最短路——SPFA
单源最短路除了dijkstra算法之外,还有一种常用的算法叫做SPFA(shortest path faster algorithm)算法,不同于dijkstra的复杂度为o(n^2),SPFA算法的平均复杂度为o(kE),E为边数,且k通常不超过2。SPFA在实现时有bfs和dfs两种方式,但是在图的拓扑关系比较强时,用dfs会造成一条边的大量重复访问,会降低算法的稳定性,所以一般推荐使用b原创 2016-03-02 22:52:03 · 834 阅读 · 0 评论