1.SPFA,kruskal在稀疏图上有优势。
2.dij,prim稠密图上占优。
3.dij不能处理负边权(被坑了好多次啊啊啊啊啊),SPFA可以。
4.Dij与Prim两种算法本质是相同的,都是从某一个点开始进行延伸,不断更新一个dis值,直到所有的点都被遍历到,从而求出一个最短路或者是一个树的边权的最小总和。
小小区别在于Prim的dis为当前生成树的子图的结点集与 i 点的最短路,(就相当于把这个子图缩成一个大点嘛)因此当某点加入生成树(vis[ x ]=1)时,
最小生成树更新条件为:if (!vis[k] && e[j].val<dis[k])
而Dij的dis为当前点与起点的目前的最短距离,只有当前点vis[ x ]=1时,可认为当前点已经求出最终的最短路。
最短路更新条件为:if (!vis[k]&&dis[i]+e[j].val<dis[k])