最小生成树的Prim算法
#include<stdio.h>
#define MAXNODE 30
#define MAXCOST 32767 void Prim(int gm[][],int closevertex[],int n)//从存储序号为0的顶点出发建立连通网的最小生成树,gm是邻接矩阵,n为顶点个数,最终建立最小生成树存于数组closevertex中
{
int lowcost[MAXNODE];
int i,j,k,mincost;
for(i=;i<n;i++)//初始化
{
lowcost[i]=gm[][i];//边(u0,ui)的权值送lowcost[i]
closevertex[i]=;//假定顶点ui到顶点u0有一条边
}
lowcost[]=;//从序号为0的顶点u0出发生成最小生成树,此时u0已经进入U集
closevertex[]=;
for(i=;i<n;i++)//在n个顶点中生成有n-1条边的最小生成树(共n-1趟)
{
mincost=MAXCOST;//MOXCOST为一个极大的常量值
j=;k=;
while(j<n)//寻找未找到过的最小权值边
{
if(lowcost[j]!=&&lowcost[j]<mincost)
{
mincost=lowcost[j];//记下最小权值边的权值
k=j;//记下最小权值边在V-U集中的顶点序号 }
j++;//继续寻找
}
printf("Edge:(%d,%d),Wight:%d\n",k,closevertex[k],mincost);//输出最小生成树的边与权值
lowcost[k]=;//顶点k进入U集
for(j=;j<n;j++)
if(lowcost[j]!=&&gm[k][j]<lowcost[j])//若顶点k进入U集后使顶点k与另一顶点j(在V-U集中)构成的边权值
{ //变小则改变lowcost[j]为这个小值,并将此最小权值的边(j,k)记入closevertex数组
lowcost[j]=gm[k][j];
closevertex[j]=k;
}
}
} void main()
{
int closevertex[MAXNODE];//存放最小生成树所有边的数组
int g[][]={{,,,,,},{,,,,,},{,,,,,},
{,,,,,},{,,,,,},{,,,,,}};
Prim(g,closevertex,);//生成最小生成树
}
输出:
连接图和对应邻接矩阵如下:

执行Prim算法产生最小生成树的分析过程见表,“---"标记的权值为每一趟所找到的最小权值。图中最小生成树每一步生长示意a~f分别对应表中的(1)~(6)趟:(1)为初始状态,(2)到(6)为生成n-1条边的n-1趟生长过程。

最小生成树的每一步生长情况如下图所示。其中带阴影的顶点属于U集,不带阴影的顶点属于V-U集;虚线边为待查的满足一顶点属于U集而另一顶点属于V-U集的边,而实线边则为已找到的最小生成树中的边。
最小生成树的Prim算法的更多相关文章
- C++编程练习(10)----“图的最小生成树“(Prim算法、Kruskal算法)
1.Prim 算法 以某顶点为起点,逐步找各顶点上最小权值的边来构建最小生成树. 2.Kruskal 算法 直接寻找最小权值的边来构建最小生成树. 比较: Kruskal 算法主要是针对边来展开,边数 ...
- 最小生成树一·Prim算法
描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可以拥有不止一个城市了! 但是,问题也接踵而来——小Hi现在手上拥有N座城市,且已知这N座城市中任意两座城市之间建造道 ...
- 数据结构与算法--最小生成树之Prim算法
数据结构与算法--最小生成树之Prim算法 加权图是一种为每条边关联一个权值或称为成本的图模型.所谓生成树,是某图的一棵含有全部n个顶点的无环连通子图,它有n - 1条边.最小生成树(MST)是加权图 ...
- 24最小生成树之Prim算法
最小生成树的Prim算法 思想:采用子树延伸法 将顶点分成两类: 生长点——已经在生成树上的顶点 非生长点——未长到生成树上的顶点 使用待选边表: 每个非生长点在待选边表中有一条待选边,一端连着非生长 ...
- hihocoder 1097 最小生成树一·Prim算法
#1097 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可 ...
- 算法学习记录-图——最小生成树之prim算法
一个连通图的生成树是一个极小的连通子图,它包含图中全部的顶点(n个顶点),但只有n-1条边. 最小生成树:构造连通网的最小代价(最小权值)生成树. prim算法在严蔚敏树上有解释,但是都是数学语言,很 ...
- Hihocoder 之 #1097 : 最小生成树一·Prim算法 (用vector二维 模拟邻接表,进行prim()生成树算法, *【模板】)
#1097 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可 ...
- hihocoder hiho一下 第二十六周 最小生成树一·(Prim算法)
题目1 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可以拥 ...
- 无向图最小生成树(prim算法)
普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点,且其所有边的权值之和亦为最小.该算法于1930年由捷 ...
随机推荐
- microtime()
PHP函数microtime()返回当前 Unix 时间戳和微秒数.
- 左右躲避障碍-神手ts版本
TypeScript-左右躲避障碍-神手 学习typescript,第一步应该是学习官方文档,理解最基础的语法.第二步开始用typescript实现一些js+css 或者canvas类型的游行.现在开 ...
- 51nod 1831 小C的游戏(博弈论+打表)
比较坑的题目. 题意就是:给出一堆石子,一次操作可以变成它的约数个,也可以拿只拿一个,不能变成一个,最后拿的人输. 经过打表发现 几乎所有质数都是先手必败的,几乎所有合数都是先手必胜的 只有几个例外, ...
- 部分经典IT书籍
部分经典IT书籍 [系统,网路管理]1) Learning the Unix Operating System 1565923901 O'reilly/1997-4ed ***强力推荐给想入门unix ...
- [学习笔记]扩展LUCAS定理
可以先做这个题[SDOI2010]古代猪文 此算法和LUCAS定理没有半毛钱关系. [模板]扩展卢卡斯 不保证P是质数. $C_n^m=\frac{n!}{m!(n-m)!}$ 麻烦的是分母. 如果互 ...
- json解析之jackson
对于json格式的数据解析现在越来越多了,之前介绍了两种:fastjson和net.sf.json解析. 今天又有一个jackson解析.不过相对于之前两种,这种感觉稍微笨拙些.呵呵,还是了解下吧: ...
- angularjs的验证信息的写法
<div ng-messages="alarmDelayForm.alarmRuleName.$error" role="alert"> <d ...
- ppk和pem证书互转
首先你得去下载个putty pem:通用证书格式 ppk:为putty下面的专有格式 pem->ppk 直接通过putty下的puttygen.exe 选的Load private ke ...
- Lucene4.6 把时间信息写入倒排索引的Offset偏移量中,并实现按时间位置查询
有个新的技术需求,需要对Lucene4.x的源码进行扩展,把如下的有时间位置的文本写入倒排索引,为此,我扩展了一个TimeTokenizer分词器,在这个分词器里将时间信息写入 偏移量Offset中. ...
- HTTP中的URL长度限制
首先,其实http 1.1 协议中对url的长度是不受限制的,协议原文: The HTTP protocol does not place any a priori limit on the leng ...