prim和DIjkstra相似,都使用了贪心策略,加一些限制条件。

prim每次会找出尽量小的那个边,将其加入到树中,最终使得生成树长大。

树中有n-1个节点时或者剩下的所有边都是INF,算法结束。

(如果剩下的所有边都是INF, 那么最小生成树不存在)。

我们这里使用邻接矩阵来实现prim算法。

初始化:

  定义dist[]数组,保存每个节点到树的最小距离,当节点在树中时更新为0。

  先找到一个根节点A,将其加入树中, dist[A] = 0

(1)从还没加入到树中的节点中选择一条到树距离最短的i,将其加入树中:

    dist[i] = 0

(2)节点 i 加入树可能导致其他节点到树的最短距离改变,所以我们对与 i 节点相连的并且不在树中的节点最短距离进行更新

    如果G[i][j] < dist[j]

      dist[j] = G[i][j]

(3)循环直到找出了n-1条边或者剩下的边中都是INF,算法结束。

typedef int Vertex;

typedef int Weight;

typedef struct MyGraph
{
int v, e;
Weight g[MaxVertexNum][MaxVertexNum];
}MyGraph; void Prim(MyGraph& G, Vertex u)
{
int dist[G.v]; //初始化
for(int i = ; i < G.v; i++)
{
if(G.g[u][i] == -)
dist[i] = INF;
else
dist[i] = G.g[u][i];
} int count = ;
for(; count < G.v; count++)
{
int mmin = INF;
int k = -;
//找到最小距离
for(int i = ; i < G.v; i++)
{
if(dist[i] != && mmin > dist[i])
{
mmin = dist[i];
k = i;
}
}
//若找不到则代表不能得到生成树
if(k == -)
return false; //将最小节点加入
dist[k] = ;
count++;
//更新dist数组
for(int i = ; i < G.v; i++)
{
if(dist[i] != && dist[i] > G.g[k][i])
dist[i] = G.g[k][i];
}
} }

prim最小生成树的更多相关文章

  1. Prim 最小生成树算法

    Prim 算法是一种解决最小生成树问题(Minimum Spanning Tree)的算法.和 Kruskal 算法类似,Prim 算法的设计也是基于贪心算法(Greedy algorithm). P ...

  2. dijkstra(最短路)和Prim(最小生成树)下的堆优化

    dijkstra(最短路)和Prim(最小生成树)下的堆优化 最小堆: down(i)[向下调整]:从第k层的点i开始向下操作,第k层的点与第k+1层的点(如果有)进行值大小的判断,如果父节点的值大于 ...

  3. 【POJ 2485】Highways(Prim最小生成树)

    题目 Prim算法:任选一个点,加入集合,找出和它最近的点,加入集合,然后用加入集合的点去更新其它点的最近距离......这题求最小生成树最大的边,于是每次更新一下最大边. #include < ...

  4. POJ 2485 Highways (prim最小生成树)

    对于终于生成的最小生成树中最长边所连接的两点来说 不存在更短的边使得该两点以不论什么方式联通 对于本题来说 最小生成树中的最长边的边长就是使整个图联通的最长边的边长 由此可知仅仅要对给出城市所抽象出的 ...

  5. Prim最小生成树板子

    普里姆算法可以称为"加点法",每次迭代选择代价最小的边对应的点,加入到最小生成树中.算法从某一个顶点s开始,逐渐长大覆盖整个连通网的所有顶点. 邻接矩阵存图  时间复杂度O(n^2 ...

  6. HDU4081 Qin Shi Huang&#39;s National Road System【prim最小生成树+枚举】

    先求出最小生成树,然后枚举树上的边,对于每条边"分别"找出这条割边形成的两个块中点权最大的两个 1.因为结果是A/B.A的变化会引起B的变化,两个制约.无法直接贪心出最大的A/B. ...

  7. poj_1258 prim最小生成树

    题目大意 给定N个点,以及每两个点之间的路径长度,求出一个连接这N个点的方案,使得连接这N个点的总长度最短,求出该总长度. 题目分析 求最小生成树MST的模板题,直接使用prim算法进行求解. 实现( ...

  8. Poj 2421 Constructing Roads(Prim 最小生成树)

    题意:有几个村庄,要修最短的路,使得这几个村庄连通.但是现在已经有了几条路,求在已有路径上还要修至少多长的路. 分析:用Prim求最小生成树,将已有路径的长度置为0,由于0是最小的长度,所以一定会被P ...

  9. Poj(2421),Prim最小生成树

    题目链接:http://poj.org/problem?id=2421 最小生成树的变形,有的村庄已经连接了,就直接把他们的权值赋为0,一样的做最小生成树,Prim算法. #include <s ...

随机推荐

  1. MyCP -tx -xt 功能的Java实现

    MyCP -tx -xt 功能的Java实现 功能简介 java MyCP -tx XXX1.txt XXX2.bin 用来把文本文件(内容为十进制数字)转化为二进制文件 java MyCP -xt ...

  2. html转化为图片下载

    业务需求:按照客户要求把排课表转化为图片下载到本地.一个月到排课有很多.所以图片会很大 <!DOCTYPE html> <html lang="en"> & ...

  3. 安装centos 6.7&7.4

    1.安装centos 6.7 1) 2)检查软件有无故障.没有必要检查.选择skip,跳过 3) 4) 5) 6)选择存储设备,第一个为基本存储设备,比如ssd,scsi等常见笔记本.电脑,服务器都选 ...

  4. vue iview render里面写时间截取

    render: (h, params) => {params.row.execDate = (params.row.execDate ? params.row.execDate.substr(0 ...

  5. Angular官方教程采坑

    Angualar 7.0.1是现在的最新版本,教程总体来说还是不错的,但是我在跟着教程做英雄项目的时候出现了一个很明显的坑. 在教程的第6部分HTTP的内容中写到(见下图) 文档中特别注明了要使用0. ...

  6. 探索未知种族之osg类生物---渲染遍历之认识SceneView

    前言 我们在进行osg程序的开发时,最常用到的场景管理方式是“场景节点树”的结构,     a 场景树底端的叶节点(osg::Geode)包含了各种需要渲染的几何体的顶点和渲染状态信息:     b  ...

  7. NC 63凭证辅助相关表

    1:通过公司主键(pk_org)在AccChartVO(表:bd_accchart)找:pk_accchart 2:通过科目编码和pk_accchart在AccAsoaVO(表:bd_accasoa) ...

  8. UI设计之动画—从虚拟到现实

    以下内容由摹客团队翻译整理,仅供学习交流,摹客iDoc是支持智能标注和切图的产品协作设计神器. 用户界面设计中的动画一直是这几年热议的话题,尤其活跃在概念动画领域.它为设计师提供创造性实验并推动UI动 ...

  9. C#下载Url文件到本地

    protected void Page_Load(object sender, EventArgs e) { string filePath = Request.Params["FilePa ...

  10. sublime包管理

    安装 到https://packagecontrol.io/installation#st3拷贝 import urllib.request,os,hashlib; h = '2915d1851351 ...