刚刚发了mst 的kruskal,现在再来一发,说一说prim咯。

    prim适用于稠密图。

    与kruskal不同,prim是从一个点开始,不断加入新的点直至连通所有点。

    讲讲prim的过程,我们假定有2个集合u和v,u存放所有已经加入的点,v存放还没有加入的点,先把点编号为0~n-1,从0点开始,把0加入u,我们扫描所有和0连接的点,不连接则为INF,把其中与0的边权值最小的点加入到u,再继续扫描连接u和v的所有边,把其中权值最小的边的点加入到u,再继续扫描所有连接u和v的边,把其中权值最小的边的点加入到u,嗯,就是这样一直扫描,直至所有点都在u。

结合代码讲讲吧。

下面这份代码也是来自fanal爷kuangbin,他的博客地址kuangbin.net,我不是抄袭,嗯,他说可以的。

这里是使用邻接矩阵。

标号从0开始,0~n-1

代码手打,没有语法高亮。

const int INF=0x3f3f3f;

const int MAXN=110;//最大节点数

bool vis[MAXN];//是否在集合u中,初始化为false

int lowc[MAXN];//扫描时存储的边的信息,初始化为INF

int cost[MAXN][MAXN];//初始化为INF

int prim(int n)//传入n,返回最小权值 ,不连通,返回-1

{

  int ans=0;//记得初始化

  memset(vis,false,sizeof(vis));

  vis[0]=true;//先拿一个点

  for(int i=1;i<n;i++)

   lowc[i]=cost[0][i];

  for(int i=1;i<n;i++)//从1开始,n-1次,拿n-1个点,若是节点编号为1~n,则从2开始,i<=n,也是拿n-1个点

  {

    int mic=INF;

    int p=-1;

    for(int j=0;j<n;j++)

    if(!vis[j]&&lowc[j]<minc)

    {

      minc=lowc[j];

      p=j;

    }

    if(minc==INF)

      return -1;

    ans+=minc;

    vis[p]=true;

    for(int j=0;j<n;j++)

    if(!vis[j]&&cost[p][j]<lowc[j])

      lowc[j]=cost[p][j];

  }

  return ans;

}

MST_prim的更多相关文章

  1. NOIP常见模板集合

    Preface 这篇博客记录的是我联赛前虽然只有两天了的打板子记录. 只求真的能给我起到些作用吧,一般按照难度排序. 而且从这篇博客开始我会用H3的标题代替H4 为了节约篇幅,以下的代码一般均以cla ...

  2. NP完全性理论与近似算法

    转自:http://www.cnblogs.com/chinazhangjie/archive/2010/12/06/1898070.html 一.图灵机 根据有限状态控制器的当前状态及每个读写头读到 ...

  3. 最小生成数 克鲁斯卡尔 普里姆 matlab

    克鲁斯卡尔: function T=MST_Kruskal(G) n=0; if isfield(G,'w') && ~isempty(G.w) && size(G.w ...

  4. 最小生成树基础算法(Prim + Krustal)

    最小生成树问题的引入: 对于一个无向图G(V, E),需要用图中的n - 1条边连接图中的n个顶点并且不产生回路所产生的树就叫做生成树,其中权值总和最小的就是最小生成树. 如何求解最小生成树问题: 譬 ...

随机推荐

  1. Linux内核源代码的结构(转)

    源代码所有在目录:/usr/src/linux (大部分linux发行版本中)  init 内核初始化代码  kernel 内核核心部分:进程.定时.程序执行.信号.模块...  mm 内存处理  a ...

  2. 黑马程序员——JAVA基础之简述集合collection

    ------- android培训.java培训.期待与您交流! ---------- 集合: 为什么出现集合类? •  面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对 ...

  3. MySQL-python模块

    1.  Python 操作 Mysql 模块的安装 linux: pip install MySQL-python 或 yum -y install MySQL-python windows: exe ...

  4. (转)A Beginner's Guide To Understanding Convolutional Neural Networks

    Adit Deshpande CS Undergrad at UCLA ('19) Blog About A Beginner's Guide To Understanding Convolution ...

  5. MMU讲解

    MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器.物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制 ...

  6. Win7+VS2010环境下CEGUI 0.8.4编译过程详解

    转载▼   1. 在http://cegui.org.uk/download 下载CEGUI源码包 cegui-0.8.4 以及CEGUI依赖库(Windows / Apple OS X only) ...

  7. javascript error

    IE 6下expected identifier,string or number(缺少标示符.字符串或数字)其实就是多了一个逗号,之前没发现

  8. Collection+JSON 文档

    Collection+JSON 文档 对于这个设计,我们不再以可能的状态和转移为起点,相反,我们将从一个集合状态响应中可能元素的顶层布局开始.从这一点入手,其他细节可以随着设计向超媒体类型最底层属性的 ...

  9. docker nodejs 基本应用

    1. 安装docker 环境 2. nodejs  应用布局 package.json { "name": "docker-centos-hello", &qu ...

  10. 【转】Android中JNI的使用方法

    Android中JNI的使用方法 首先看一下Android平台的框架图:(网上盗用) 可以看到Android上层的Application和ApplicationFramework都是使用Java编写, ...