目录

基本思想

实现

伪代码

实际问题求解


最小生成树:带权连通图的生成树中 边的权值之和最小的那个生成树。

  • 最小生成树不是唯一的。当图中的各边权值互不相等时,最小生成树是唯一的;
  • 若无向连通图本身是一棵树时(边数比顶点数少1 ),则最小生成树就是它本身。
  • 最小生成树的边数为顶点数减1

基本思想

(找距离最近的结点)

  1. 任选一个结点v1,然后选择离【当前选中结点集合】最近的一个结点v2;
  2. 再选择离【当前选中结点集合{v1,v2}】结点最近的一个结点;依次重复,直到点全部被选中。

  • Prim算法的时间复杂度为不依赖于,因此它适用于求解边稠密图的最小生成树。

实现

伪代码

void Prim (G , T ) { T = 空集 ;               //初始化空树U={w};                  //添加任一顶点wwhile( (V-U) != 空集 ) {    //若树中不含全部顶点设 ( u , v ) 是使u∈U 与 v∈(V-U),且权值最小的边;T=TU{ (u,v) };     //边归入树U=U U{v);            //顶点归入树}
}

实际问题求解

[USACO3.1]最短网络 Agri-Net

题目背景:Farmer John 被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场。当然,他需要你的帮助。

题目描述:FJ 已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场。为了用最小的消费,他想铺设最短的光纤去连接所有的农场。

你将得到一份各农场之间连接费用的列表,你必须找出能连接所有农场并所用光纤最短的方案。每两个农场间的距离不会超过

(采用基本Prim算法求解:Kruskal算法求解见专栏)

public class MST {public int prim(int[][] w){int n=w.length;//最小生成树总权值int result=0;//加入的顶点集boolean[] Vex=new boolean[n];//当前已确定的顶点集到i的最短距离int[] dis=new int[n];//初始化//任选v点开始点int v=0;Vex[0]=true;for (int i = 0; i < n; i++) {dis[i]=w[v][i];}//遍历n次,选n个顶点for (int l = 0; l < n; l++) {//选取当前顶点集到其它顶点的最短路径int temp=-1;for (int i = 0; i < n; i++) {if ((!Vex[i])&&(temp==-1||(dis[i]>0&&dis[i]<dis[temp]))){temp=i;}}if (temp==-1) {return -1;}//将找到的距离最近的顶点加入顶点集Vex[temp] = true;v = temp;result += dis[temp];//由于顶点集新加入一个顶点,要更新当前已确定的顶点集到i的最短距离for (int i = 0; i < w.length; i++) {if ((!Vex[i])&&w[v][i]>0&&w[v][i]<dis[i]){dis[i]=w[v][i];}}}return result;}public static void main(String[] args) {Scanner scan=new Scanner(System.in);int n=scan.nextInt();int[][] w=new int[n][n];for (int i = 0; i < w.length; i++) {for (int j = 0; j < w.length; j++) {w[i][j]=scan.nextInt();}}System.out.println(new MST().prim(w));}
}

最小生成树——Prim算法相关推荐

  1. [Java学习] 最小生成树——Prim算法

    文章目录 最小生成树 Prim算法流程 应用实例 求最小生成树 最小生成树 百度百科上对于最小生成树的定义是这样的:一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结 ...

  2. 最小生成树Prim算法Java版

    最小生成树Prim算法Java版 算法描述: 在一个加权连通图中,顶点集合V,边集合为E 任意选出一个点作为初始顶点,标记为visit,计算所有与之相连接的点的距离,选择距离最短的,标记visit. ...

  3. D-OJ刷题日记:使用邻接矩阵实现最小生成树Prim算法 题目编号:1135

    理解: [理解prim算法本质--让一棵小树逐渐长大] Prim算法:又称为加边法,即每次选择最小权值的边加入到生成树中,然后再更新权值,如此反复,保证每次最优来达到最优解. Prim算法生成树用的是 ...

  4. 西南科技大学OJ题 求最小生成树(Prim算法)1075

    求最小生成树(Prim算法) 1000(ms) 10000(kb) 2256 / 4495 Tags: 生成树 求出给定无向带权图的最小生成树.图的定点为字符型,权值为不超过100的整形.在提示中已经 ...

  5. 最小生成树-Prim算法详解(含全部代码)

    目录 适用条件 测试所用图 算法详解 Prim算法代码 全部代码 实验结果 适用条件 加权连通图 测试所用图 所用原图及生成过程 其中,(a) 为原图,圆圈里面是节点的名称,边上的数字是边的权值.由实 ...

  6. 最小生成树 - Prim算法

    最小生成树 - Prim算法 思路: 采用 贪心策略,每次选取连通块外延的最短边和对应的点放入连通块,再更新新的连通块外延的边.连通部分逐渐扩大,最后将整个图连通起来,并且边长之和最小. 时间复杂度: ...

  7. 【数据结构】最小生成树 Prim算法 Kruskal算法

    最小生成树应用场景: 假设以下场景,有一块木板,板上钉上一些钉子,这些钉子可以由一些细绳连接起来.假设每个钉子可以通过一根或者多根细绳连接起来,那么一定存在这样得情况,即用最少的细绳把所有的钉子连接起 ...

  8. 生成树的概念,最小生成树Prim算法 Kruskal算法

    求解最小生成树可以用Prim算法 Kruskal算法

  9. POJ2728 Desert King ——01分数规划Dinkelbach迭代法+最小生成树prim算法

    首先,纪念我用Linux系统AC的第一题-   安装这个万恶的NOI Linux系统费了6小时的时间,不过好在最后终于装上了,但是因为我安装的Linux系统比较烂,还遭到了小花儿和js的鄙视,唉,本人 ...

  10. 图论(十)最小生成树-Prim算法

    前面说过,Prim算法是从顶点着手构建最小生成树的.应该说,Prim算法比Kruskal更简单.我们还是以前面的乡镇假设光纤网络为例: Prim算法工作步骤 (1) 构建全部顶点集V,选取初始顶点,加 ...

最新文章

  1. python代码块使用缩进表示-python中的代码块使用缩进来表示。
  2. Yum mysql 日志_CentOS5上yum安装Apache+php+Mysql
  3. 使用 PyTorch 数据读取,JAX 框架来训练一个简单的神经网络
  4. Java 数组中new Object[5]语句是否创建了5个对象?
  5. 华为方舟编译器正式开源,采用自主平台托管
  6. redis源码dict.c simple reading
  7. python读音-Python怎么读
  8. 进化算法求解TSP问题
  9. 相机与镜头的基本概念
  10. 两个人聪明人的空城——《司马懿之虎啸龙吟》
  11. 虚拟机复制镜像操作方法
  12. 读书|林曦:她把自己的生活,过成了无用但丰盈的美学
  13. 达梦数据库监控-DEM 部署
  14. mysql存储过程基础写法
  15. “一个部族,一个民族,一个弗雷尔卓德。”
  16. 【小白】使用Typora与微云实现数据同步
  17. MySQL DBlink
  18. Ubuntu16.04安装谷歌浏览器和selenium
  19. css画表格多级表头,element UI实现动态生成多级表头
  20. 近日总结3.20-3.22(内控流程图、VBA对象树、编程语言对比、BI的学习)

热门文章

  1. 新版teamtalk部署流程
  2. S3C2440 开发板实战(9):poll机制
  3. PAT 甲级 1018. Public Bike Management
  4. idea 使用exe4j生成exe文件并且附带jre运行环境(亲测有效)
  5. java远程连接linux并发送命令,两种方案比较Jsch与ganymed-ssh2
  6. B端产品运营:获客渠道和方法
  7. 【MAYA】XGEN毛发头发系统(中文版)
  8. 正则表达式 学习笔记
  9. 即时通讯视频聊天代码和技术架构
  10. 关于wish平台收款方式的比较,哪个更好?