摘要: 图论中,用来求最短路的方法有很多,适用范围和时间复杂度也各不相同。本文主要介绍的算法的代码主要来源如下:Dijkstra: Algorithms(《算法概论》)Sanjoy Dasgupta, Christos Papadimitriou, Umesh Vazirani;《算法竞赛入... 阅读全文
posted @ 2017-08-07 08:47 ChuningGao 阅读(494) 评论(0) 推荐(0)
摘要: Dijkstra:适用于权值为非负的图的单源最短路径,用斐波那契堆的复杂度O(E+VlgV)BellmanFord:适用于权值有负值的图的单源最短路径,并且能够检测负圈,复杂度O(VE)SPFA:适用于权值有负值,且没有负圈的图的单源最短路径,论文中的复杂度O(kE),k为每个节点进... 阅读全文
posted @ 2017-08-07 08:43 ChuningGao 阅读(285) 评论(0) 推荐(0)
摘要: 图的表示方法最常用的表示图的方法是邻接矩阵与邻接表。邻接矩阵表示法设G是一个有n(n>0)个顶点的图,V(G)={v1, v2, …, vn},则邻接矩阵AG是一个n阶二维矩阵。在该矩阵中,如果vi至vj有一条边,则(i, j)项的值为1,否则为0,即: 邻接矩阵的... 阅读全文
posted @ 2017-08-07 08:41 ChuningGao 阅读(6146) 评论(0) 推荐(0)
摘要: 一、DijkstraDijkstra单源最短路算法,即计算从起点出发到每个点的最短路。所以Dijkstra常常作为其他算法的预处理。 使用邻接矩阵的时间复杂度为O(n^2),用优先队列的复杂度为O((m+n)logn)近似为O(mlogn)(一) 过程每次选择一个未访问过的到已经访... 阅读全文
posted @ 2017-08-07 08:38 ChuningGao 阅读(3151) 评论(0) 推荐(1)
摘要: 适用范围:给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了。 我们约定有向加权图G不存在负权回路,即最短路径一定存在。当然,我们可以在执行该算法前做一次拓扑排序,以判断是否存在负权回路,但这不是... 阅读全文
posted @ 2017-08-07 08:34 ChuningGao 阅读(393) 评论(0) 推荐(0)
摘要: SPFA算法为了简便,我们约定图中不存在负权回路,这可以通过一次拓扑排序知道。SPFA实际是Bellman-Ford算法的一种队列实现,用一个数组来保存最短路径的估计值,初始时将源加入队列,每次从队列中取队头元素,并对所有与其相邻的结点进行松弛操作,如果该点的估计值有所调整,且该点不... 阅读全文
posted @ 2017-08-07 08:32 ChuningGao 阅读(171) 评论(0) 推荐(0)
摘要: 适用范围:给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了。 我们约定有向加权图G不存在负权回路,即最短路径一定存在。当然,我们可以在执行该算法前做一次拓扑排序,以判断是否存在负权回路,但这不是... 阅读全文
posted @ 2017-08-07 08:28 ChuningGao 阅读(256) 评论(0) 推荐(0)