最小生成树的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年由捷 ...
随机推荐
- Struts2监听Action结果的监听器
作者:禅楼望月 在前面我们学到了在特定的Action中配置结果监听器,在Action完成控制处理之后,struts2转入实际的物理视图之前被回调.但是这种方式的缺点是,结果的监听器不能被复用.根据设计 ...
- Java IO 之 File 的创建、重命名与遍历
File表示存储设备上的一个文件或目录,使用方式查看API即可,比较简单 package org.zln.io.file; import java.io.File; /** * Created by ...
- 【bzoj2124】等差子序列 STL-bitset
题目描述 给一个1到N的排列{Ai},询问是否存在1<=p1<p2<p3<p4<p5<…<pLen<=N (Len>=3),使得Ap1,Ap2,A ...
- [2018冬令营模拟测试赛(二十一)]Problem A: Decalcomania
[2018冬令营模拟测试赛(二十一)]Problem A: Decalcomania 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见&quo ...
- hadoop基础----hadoop实战(九)-----hadoop管理工具---CDH的错误排查(持续更新)
在CDH安装完成后或者CDH使用过程中经常会有错误或者警报,需要我们去解决,积累如下: 解决红色警报 时钟偏差 这是因为我们的NTP服务不起作用导致的,几台机子之间有几秒钟的时间偏差. 这种情况下一是 ...
- 【POJ 1201 Intervals】
Time Limit: 2000MSMeamory Limit: 65536K Total Submissions: 27949Accepted: 10764 Description You are ...
- springboot搭建web项目(转)
转:http://blog.csdn.net/linzhiqiang0316/article/details/52589789 这几天一直在研究IDEA上面怎么搭建一个web-mvc的SpringBo ...
- Java实现十进制数转十六进制数
Now~Let's begin our second question~ 如何利用Java语言将十进制数字转换成十六进制数字呢? 我第一次编码出来的效果是酱紫的~ /** * */ package c ...
- Java super和this
this this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针. this的用法在java中大体可以分为3种: 1.普通的直接引用 这种就不用讲了,this相当于是指向当前对象本 ...
- JQuery如何监听DIV内容变化
这几天在做一个微博的接入,需要判断微博是否被关注,要检查微博标签的DIV是否有“已关注”的字符,但这个DIV的内容是微博JSSDK动态生 成.$("#id").html()是获取不 ...