最短路
文章平均质量分 76
__yuan__
简单、干净、温暖,便好。
展开
-
单源最短路径(Dijkstra)
Dijkstra算法基于贪心思想,计算一个节点到其他所有节点的最短路径。该算法要求图中不存在负权边。时间复杂度 O(n²)基本算法: 将图中所有的顶点V分成两个顶点集合Va和Vb。如果源点S到u的最短路径已经确定,则点u属于集合Va,否则属于集合Vb。最开始的时候Va只包含源点S,其余的点属于Vb,算法结束时所有由源点S可达的点属于Va,由源点S不可达的点扔留在Vb中。可以在原创 2015-07-13 19:35:48 · 494 阅读 · 0 评论 -
每对顶点间的最短距离——floyd算法
Floyd算法用来找出每对顶点之间的最短距离,它对于图的要求是,可以是无向图也可以是有向图,边权可正可负,唯一的要求是不能有负环。 时间复杂度 o(n²) Floyd算法基于动态规划的思想,以u到v的最短路径至少经过前k个点为转移状态进行计算,通过k的增加达到寻找最短路径的目的。当k增加1时,最短路径要么不变,如果改变,必定通过第k个点,也就是说当起点u到第k个点的最短路径加上第k原创 2015-07-14 10:28:47 · 930 阅读 · 0 评论 -
单源最短路径——Bellman--Ford算法
Bellman--Ford算法可以处理路径权值为负数的单源最短路径问题。时间复杂度 o(n*m) 设想可以从图中找到一个环路,且这个环路中所有路径的权值之和为负。那么通过这个环路,环路中任意两点的最短路径就可以无穷小下去。如果不处理这个负环路,程序就会永远运行下去。而Bellman--Ford算法具有分辨这种负环路的能力。基本算法: Bellman--Ford算法基于原创 2015-07-13 20:24:05 · 693 阅读 · 0 评论 -
单源最短路径 ——SPFA算法
求单源最短路径的SPFA算法在Bellman-Ford算法的基础上进行了改进,使其在能够计算带负权图的单源最短路径的基础上,时间复杂度大幅度降低。时间复杂度 O(k*e) k基本算法: 设立一个先进先出的队列来保存待优化的节点,优化时每次取出队首节点u,并且用u点当前的最短路径估计值对离开u点所指向的节点v进行松弛操作,如果v点的最短路径估计值有所调整,且v点不在当前的队列原创 2015-07-13 20:39:04 · 546 阅读 · 0 评论