两种算法本质是相同的。

都是从某一个点开始进行延伸,不断更新一个dis值,直到所有的点都被遍历到,从而求出一个最短路或者是一个树的边权的最小总和。

朴素算法都是n^2,都可以采用堆优化处理,降低复杂度到mlogn.

但是在一张完全图上跑,此时m=n^2,朴素算法反而快一些。而且常数小。

相比较于SPFA,dij可以稳定的mlogn 或者 n^2.

SPFA理论上是KE,但是完全图上E=n^2,直接多乘了一个k,而且传说卡SPFA是比较好卡的。所以图比较稠密的时候,dij能用,就用dij。

SPFA最大的优点就是可以处理负边权。

dij代码核心:(堆优化)

朴素时候,直接扔掉优先队列,循环一遍找最小dis值。(也是n^2所在)

struct point{
int hao;
ll dis;
bool friend operator <(point a,point b)
{
return a.dis>b.dis;
}
};
priority_queue<point>q;
void dij()
{
point st;
st.hao=s;
st.dis=;
q.push(st);
int has=;
while((has!=n)&&(!q.empty()))
{
point now=q.top();
q.pop();
if(vis[now.hao]) continue;
has++;
vis[now.hao]=;
dis[now.hao]=now.dis;
for(int i=head[now.hao];i;i=bian[i].nxt)
{
int y=bian[i].to;
if(!vis[y])
{
point last;
last.hao=y;
last.dis=now.dis+bian[i].val;
q.push(last);
}
}
}
}

prim与kruskal比较,其优点也是在完全图上有稳定的复杂度n^2.

prim也可以用堆优化,但是完全图上同样也是朴素更快。

kruskal的复杂度局限在于排序。mlogm直接送出。m=n^2慢炸。

代码核心:(堆优化)

朴素时候,直接扔掉优先队列,循环一遍找最小dis值。(也是n^2所在)

struct point{
int dis,hao;
bool friend operator <(point a,point b)
{
return a.dis>b.dis;
}
};
priority_queue<point>q;
int n,m;
int sum;
bool vis[N];
bool work()
{
point now;
now.hao=;
now.dis=;
int has=;
q.push(now);
while(has!=n&&(!q.empty()))
{
point now=q.top();q.pop();
if(vis[now.hao]) continue;
vis[now.hao]=;has++;
sum+=now.dis;
for(int i=head[now.hao];i;i=bian[i].nxt)
{
int y=bian[i].to;
if(!vis[y])
{
point kk;
kk.hao=y;
kk.dis=bian[i].val;
q.push(kk);
}
}
}
if(has==n) return true;
return false;
}

总结:

1.SPFA,kruskal在稀疏图上有优势。

2.dij,prim稠密图上占优。

3.dij不能处理负边权,SPFA可以。

dij与prim算法的更多相关文章

  1. 图的生成树(森林)(克鲁斯卡尔Kruskal算法和普里姆Prim算法)、以及并查集的使用

    图的连通性问题:无向图的连通分量和生成树,所有顶点均由边连接在一起,但不存在回路的图. 设图 G=(V, E) 是个连通图,当从图任一顶点出发遍历图G 时,将边集 E(G) 分成两个集合 T(G) 和 ...

  2. 最小生成树のprim算法

    Problem A Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Sub ...

  3. 数据结构代码整理(线性表,栈,队列,串,二叉树,图的建立和遍历stl,最小生成树prim算法)。。持续更新中。。。

    //归并排序递归方法实现 #include <iostream> #include <cstdio> using namespace std; #define maxn 100 ...

  4. 最小生成树——prim算法

    prim算法是选取任意一个顶点作为树的一个节点,然后贪心的选取离这棵树最近的点,直到连上所有的点并且不够成环,它的时间复杂度为o(v^2) #include<iostream>#inclu ...

  5. 洛谷 P3366 【模板】最小生成树 prim算法思路 我自己的实现

    网上有很多prim算法  用邻接矩阵 加什么lowcost数组 我觉得不靠谱 毕竟邻接矩阵本身就不是存图的好方法 所以自己写了一个邻接表(边信息表)版本的  注意我还是用了优先队列  每次新加入一个点 ...

  6. 最小生成树算法——prim算法

    prim算法:从某一点开始,去遍历相邻的边,然后将权值最短的边加入集合,同时将新加入边集中的新点遍历相邻的边更新边值集合(边值集合用来找出新的最小权值边),注意每次更新都需将cost数组中的点对应的权 ...

  7. 贪心算法-最小生成树Kruskal算法和Prim算法

    Kruskal算法: 不断地选择未被选中的边中权重最轻且不会形成环的一条. 简单的理解: 不停地循环,每一次都寻找两个顶点,这两个顶点不在同一个真子集里,且边上的权值最小. 把找到的这两个顶点联合起来 ...

  8. Prim算法(三)之 Java详解

    前面分别通过C和C++实现了普里姆,本文介绍普里姆的Java实现. 目录 1. 普里姆算法介绍 2. 普里姆算法图解 3. 普里姆算法的代码说明 4. 普里姆算法的源码 转载请注明出处:http:// ...

  9. Prim算法(二)之 C++详解

    本章是普里姆算法的C++实现. 目录 1. 普里姆算法介绍 2. 普里姆算法图解 3. 普里姆算法的代码说明 4. 普里姆算法的源码 转载请注明出处:http://www.cnblogs.com/sk ...

随机推荐

  1. 【JVM.8】类加载及执行子系统的案例与实战

    一. 案例分析 1. Tomcat:正统的类加载器架构 主流的Java Web服务器,如Tomcat.Jetty.WebLogic.WebSphere或其他服务器,都实现了自己定义的类加载器(一般都不 ...

  2. StackOverflow 问题

    StackOverflow  这个问题一般是你的程序里头可能是有死循环或递归调用所产生的:可以查看一下你的程序,也可以增大你JVM的内存~~~在Eclipse中JDK的配置中加上   -XX:MaxD ...

  3. Notes of Daily Scrum Meeting(12.25)

    今天在学姐的帮助下,我们终于把网络连接的部分连通了,这对我们是一个很大的鼓舞,也找到了前期 连不通的问题在哪里,这让我们重新有了进行下去的勇气和决心,我们会在最后这几天把前端和后端结合, 做出我们最后 ...

  4. Scrum Meeting day 4

                第四次会议 No_00:工作情况 No_01:任务说明 待完成 已完成 No_10:燃尽图 No_11:照片记录 待更新 No_100:代码/文档签入记录 No_101:出席表 ...

  5. GIthub地址

    https://github.com/cuibaoxue/Text1

  6. 收获,不止oracle

    物理体系 体系结构图 缩放 1.Oracle由实例和数据库组成,上半部分的直角方框为实例instance,下半部分的圆角方框为数据库Database. 2.实例是由一个开辟的共享内存区SGA(Syst ...

  7. Apache+php安装和配置 windows

    Apache+php安装和配置 windows Apache 安装 1.官网网址:http://httpd.apache.org/ 2.Download 3.点击链接Files for Microso ...

  8. ThinkPad E470 win10,重装win10专业版后无声音

    解决办法: 1.官网下载笔记本对应的声卡驱动并安装 2.下载热键驱动并安装 3.重启笔记本即可 参考:https://blog.csdn.net/u012369373/article/details/ ...

  9. 彻底弄懂jsonp原理及实现方法

    一. 同源策略 所有支持Javascript的浏览器都会使用同源策略这个安全策略.看看百度的解释: 同源策略,它是由Netscape提出的一个著名的安全策略. 现在所有支持JavaScript 的浏览 ...

  10. [转帖]盖国强:Oracle 路线图

    http://www.eygle.com/archives/2018/12/oracle_database_release_19c_confirm.html 盖总的blog 里面讲了下相关的内容. 很 ...