prim最小生成树
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最小生成树的更多相关文章
- Prim 最小生成树算法
Prim 算法是一种解决最小生成树问题(Minimum Spanning Tree)的算法.和 Kruskal 算法类似,Prim 算法的设计也是基于贪心算法(Greedy algorithm). P ...
- dijkstra(最短路)和Prim(最小生成树)下的堆优化
dijkstra(最短路)和Prim(最小生成树)下的堆优化 最小堆: down(i)[向下调整]:从第k层的点i开始向下操作,第k层的点与第k+1层的点(如果有)进行值大小的判断,如果父节点的值大于 ...
- 【POJ 2485】Highways(Prim最小生成树)
题目 Prim算法:任选一个点,加入集合,找出和它最近的点,加入集合,然后用加入集合的点去更新其它点的最近距离......这题求最小生成树最大的边,于是每次更新一下最大边. #include < ...
- POJ 2485 Highways (prim最小生成树)
对于终于生成的最小生成树中最长边所连接的两点来说 不存在更短的边使得该两点以不论什么方式联通 对于本题来说 最小生成树中的最长边的边长就是使整个图联通的最长边的边长 由此可知仅仅要对给出城市所抽象出的 ...
- Prim最小生成树板子
普里姆算法可以称为"加点法",每次迭代选择代价最小的边对应的点,加入到最小生成树中.算法从某一个顶点s开始,逐渐长大覆盖整个连通网的所有顶点. 邻接矩阵存图 时间复杂度O(n^2 ...
- HDU4081 Qin Shi Huang's National Road System【prim最小生成树+枚举】
先求出最小生成树,然后枚举树上的边,对于每条边"分别"找出这条割边形成的两个块中点权最大的两个 1.因为结果是A/B.A的变化会引起B的变化,两个制约.无法直接贪心出最大的A/B. ...
- poj_1258 prim最小生成树
题目大意 给定N个点,以及每两个点之间的路径长度,求出一个连接这N个点的方案,使得连接这N个点的总长度最短,求出该总长度. 题目分析 求最小生成树MST的模板题,直接使用prim算法进行求解. 实现( ...
- Poj 2421 Constructing Roads(Prim 最小生成树)
题意:有几个村庄,要修最短的路,使得这几个村庄连通.但是现在已经有了几条路,求在已有路径上还要修至少多长的路. 分析:用Prim求最小生成树,将已有路径的长度置为0,由于0是最小的长度,所以一定会被P ...
- Poj(2421),Prim最小生成树
题目链接:http://poj.org/problem?id=2421 最小生成树的变形,有的村庄已经连接了,就直接把他们的权值赋为0,一样的做最小生成树,Prim算法. #include <s ...
随机推荐
- MyCP -tx -xt 功能的Java实现
MyCP -tx -xt 功能的Java实现 功能简介 java MyCP -tx XXX1.txt XXX2.bin 用来把文本文件(内容为十进制数字)转化为二进制文件 java MyCP -xt ...
- html转化为图片下载
业务需求:按照客户要求把排课表转化为图片下载到本地.一个月到排课有很多.所以图片会很大 <!DOCTYPE html> <html lang="en"> & ...
- 安装centos 6.7&7.4
1.安装centos 6.7 1) 2)检查软件有无故障.没有必要检查.选择skip,跳过 3) 4) 5) 6)选择存储设备,第一个为基本存储设备,比如ssd,scsi等常见笔记本.电脑,服务器都选 ...
- vue iview render里面写时间截取
render: (h, params) => {params.row.execDate = (params.row.execDate ? params.row.execDate.substr(0 ...
- Angular官方教程采坑
Angualar 7.0.1是现在的最新版本,教程总体来说还是不错的,但是我在跟着教程做英雄项目的时候出现了一个很明显的坑. 在教程的第6部分HTTP的内容中写到(见下图) 文档中特别注明了要使用0. ...
- 探索未知种族之osg类生物---渲染遍历之认识SceneView
前言 我们在进行osg程序的开发时,最常用到的场景管理方式是“场景节点树”的结构, a 场景树底端的叶节点(osg::Geode)包含了各种需要渲染的几何体的顶点和渲染状态信息: b ...
- NC 63凭证辅助相关表
1:通过公司主键(pk_org)在AccChartVO(表:bd_accchart)找:pk_accchart 2:通过科目编码和pk_accchart在AccAsoaVO(表:bd_accasoa) ...
- UI设计之动画—从虚拟到现实
以下内容由摹客团队翻译整理,仅供学习交流,摹客iDoc是支持智能标注和切图的产品协作设计神器. 用户界面设计中的动画一直是这几年热议的话题,尤其活跃在概念动画领域.它为设计师提供创造性实验并推动UI动 ...
- C#下载Url文件到本地
protected void Page_Load(object sender, EventArgs e) { string filePath = Request.Params["FilePa ...
- sublime包管理
安装 到https://packagecontrol.io/installation#st3拷贝 import urllib.request,os,hashlib; h = '2915d1851351 ...