以下出现的n为点数,m为边数
如何抽象一个问题建图,如何定义点和边
一般m=n^2级别成为稠密图,m=n称为稀疏图
稠密图一般用邻接矩阵存,稀疏图一般用邻接表存
单源最短路:
1.全部正权边:
dijkstra:O(n^2)主要应用于稠密图
堆优化的dijkstra:O(mlogn)主要应用于稀疏图
2.含负权边:
bellman-ford算法:O(nm) 当题目规定边数不能超过某个数,必须使用bf算法
SPFA算法:一般情况下O(m),最坏情况下O(nm)
多源最短路:
floyed算法:O(n^3),可以处理负权边但是不能处理负环,其实这几个算法在遇到负环的时候都有同样的特性,由于负环的存在导致他们会倾向于每次都走负环,一旦这样,会将距离变成负无穷。