一、普里姆(Prim)算法

  1.基本思想:设G=(V, E)是具有n个顶点的连通网,T=(U, TE)是G的最小生成树, T的初始状态为U={u0}(u0∈V),TE={},重复执行下述操作:在所有u∈U,v∈V-U的边中找一条代价最小的边(u, v)并入集合TE,同时v并入U,直至U=V。即:

(1)从连通网络 G = { V, E }中的某一顶点 u0 出发,选择与它关联的具有最小权值的边(u0, v),将其顶点加入到生成树的顶点集合U中。

  (2)以后每一步从一个顶点在U中,而另一个顶点不在U中的各条边中选择权值最小的边(u, v),把它的顶点加入到集合U中。如此继续下去,直到网络中的所有顶点都加入到生成树顶点集合U中为止。

  2、示例:

3、实现代码如下:

#include "stdio.h" #include "stdlib.h" #define MAX 110 int a[MAX][MAX],p[MAX]; int main(void) { int i,j,k,n,t,min,sum,new_point,x,y,d; printf("请输入顶点的个数:"); scanf("%d",&n); t=n*(n-1)/2; memset(p,0,sizeof(p)); //将p数组初始化为0 printf("请输入每条边的起始端点、权值:/n"); for(i=0;i<t;i++) { scanf("%ld%ld%ld",&x,&y,&d); //输入每条边的权值 a[x][y]=a[y][x]=d; } p[1]=1; sum=0; for(k=0;k<n-1;k++) { min=-1; for(i=1;i<=n;i++) { if(p[i]==1) { for(j=1;j<=n;j++) { if(p[j]==0 && (min==-1 || min>a[i][j])) { min=a[i][j]; //从一个顶点在U中,而另一个顶点不在U中的各条边中选择权值最小的边 new_point=j; } } } } p[new_point]=1; sum+=min; } printf("最小生成树的权值为:%d/n",sum); system("pause"); return 0; }

普里姆(Prim)求最小生成树相关推荐

  1. 实验题6.3 采用普里姆算法求最小生成树

    [实验目的] (1)掌握图的最小生成树的概念: (2)熟练掌握用采用普里姆算法求最小生成树的方法及操作. [实验准备] (1)阅读教材中图的最小生成树相关内容: (2)熟悉普里姆算法. [实验要求] ...

  2. 普里姆算法求最小生成树(简易算法版)

    普里姆算法求最小生成树与之前发的迪杰斯特拉算法求最小生成树的思想类似,都是用到一个dis数组,不过与迪杰斯特拉算法不同的是,之前迪杰斯特拉算法求最短路里dis存储的是源点到各点的最短路,每次循环找离源 ...

  3. 采用普里姆算法求最小生成树

    目的:领会普里姆算法求带权连通图中最小生成树的过程和相关算法设计. 内容:编写一个程序exp8-5.cpp,实现求带权连通图最小生成树的普里姆算法.对于如图8.55所示的带权连通图G,输出从顶点0出发 ...

  4. 普里姆算法构造最小生成树

    /* 普利姆算法求解最小生成树,它有两个集合,已选点构成一个集合,未被选出的点都成那个一个集合 需要三个辅助的数组,adjvex[n]储存边的起点 lowcost[n]用来储存选出边的权值,vexs[ ...

  5. 数据结构与算法(7-3)最小生成树(普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法)

    目录 一.最小生成树简介 二.普里姆算法(Prim) 1.原理 2.存储 2-1.图顶点和权: 2-3. 最小生成树: 3.Prim()函数 3-1.新顶点入树 3-2.保留最小权 3-3. 找到最小 ...

  6. 普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法

    图是一种基础又重要的数据结构,图的生成树是图的一个极小连通子图.最小生成树是无向连通网的所有生成树中边的权值之和最小的一棵生成树.求图的最小生成树可以牵引出很多经典的题目,例如在N个城市之间建立通讯网 ...

  7. 【数据结构】克鲁斯卡尔(Kruskal)算法 —PK— 普里姆(Prim)算法

    目录 一.克鲁斯卡尔(Kruskal)算法 二.普里姆(Prim)算法 三.两个算法对比 求图的最小生成树的典型算法: 克鲁斯卡尔(Kruskal)算法 普里姆(Prim)算法 注:考虑问题的出发点相 ...

  8. 我所知道的十大常用算法之普里姆算法(最小生成树)

    前言需求 今天我们学习的是普里姆算法,我们还是从一个场景里引入看看 有7个村庄(A, B, C, D, E, F, G) ,现在需要修路把7个村庄连通 1.各个村庄的距离用边线表示(权) ,比如 A ...

  9. 最小生成树普里姆算法c语言代码,普里姆算法生成最小生成树-C语言描述.doc

    PAGE JIN JINGCHU UNIVERSITY OF TECHNOLOGY <数据结构(C语言描述)> 课程设计 学 院 计算机工程学院 班 级 12级软件技术1班 学 号 201 ...

  10. 最小生成树——普里姆(Prim)算法

    Prim算法的基本思想是以顶点为主导地位:从起始顶点出发,通过选择当前可用的最小权值的边把其他顶点加入到生成树中来.设连通无向网为G(V,E),在普里姆算法中,将顶点集合V分成两个子集T和T'. (1 ...

最新文章

  1. HDU 2084 数塔 DP
  2. Android studio 签名使用转
  3. [转]用Whois获得电信运营商的IP地址是如何分配的?
  4. 微赞dataconfig.php,php生成微信jssdk wx.config参数,调用js接口
  5. python部署thrift服务以及客户端
  6. RedHat配置yum源
  7. python def main好处_python中 __name__及__main()__的妙处
  8. pop和push等使用方法,every和some、join
  9. 三菱PLC连接威纶通触摸屏
  10. c mysql开发工具_Windows平台下Mysql C程序设计
  11. 将文件上载到服务器是包含本地路径,2020年初级会计师考试照片审核通过但是上传不了是怎么回事?...
  12. 网站是备案域名还是服务器,网站备案是域名还是服务器
  13. 逆概率加权法(Inverse Probability Weighting, IPW)的原理及R实现
  14. java开发未来三年职业规划
  15. 微信html页面缓存问题,浅谈微信页面入口文件被缓存解决方案_简单_前端开发者...
  16. 2021年Wordpress博客装修美化(二)
  17. UDP通信——使用python实现简单的UDP通信
  18. 【NOIP2015模拟10.27】魔道研究题解
  19. 颜色 16进制表示 一一对应
  20. 简单三行JS代码实现滑动门

热门文章

  1. 历届试题 合根植物(查并集,模板+优化)
  2. 穿越时空,跟我一起探索云栖数字谷(2021云栖大会免费送票)
  3. 我们找阿里云资深技术专家李响聊了聊开源和云原生
  4. 【趣话编程】如果张东升是个程序员
  5. 低成本、高性能创客开发板——PYB Nano
  6. 从零点五开始用Unity做半个2D战棋小游戏(二)
  7. 游戏AI之决策结构—行为树
  8. SQL Editor and reconnect【mysql(workbench)更新数据时候的一个异常】【Error Code:1175】
  9. 原生js cookie本地存储
  10. Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理: