最短路的一点心得

差不多最短路的题目做的差不多了

主要三种算法:

1、FLOYD:个人比较喜欢使用,不但可以快速计算计算多源最短路,也可以判断图的连通性。时间复杂度是(顶点^3)

2、DIJK:从点的角度计算单源最短路比较方便吧,可以用邻接表优化(没用过,呵呵)。时间复杂度(顶点^2(朴素),顶点*log(顶点))

3、SPFA+静态邻接表+队列储存:是从边的角度计算单源最短路,比较牛逼的算法,因为时间复杂度比较小(边*k),其中K是常数,

注意用前两种算法时,因为这两种算法是从顶点思考,所以要小心重边的情况(有时题目没说明但自己要小心),每次读取边取小即可,用SPFA就没关系了

网上说K~2,不过实际使用时K估计接近10,因为每个顶点差不多连10条左右的边。

题型:

1、直接求单源起点最短路

2、求单源起点最短路+单源终点最短路,可以通过map矩阵转置,两次dijk算法求出

3、顶点有权值的单源起点最短路:先求各点到起点的最短路,再分别与各点权值相乘的总和

4、顶点有权值的单源起点最短路变型:求法同上

5、顶点有权值的多源起点最短路:数据小的话用FLOYD实现,大的话一般要用SPFA再枚举起点求的

6、有多个连通图的图之间点的最短路径问题:先用FLOYD求出图的连通性,再枚举图各个连通图之间的点的最短路

……

差不多了,接着是最小生成树的学习

原文地址:https://www.cnblogs.com/huhuuu/p/1956332.html