最短路
主要三种算法:
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求出图的连通性,再枚举图各个连通图之间的点的最短路
……