基于并查集的kruskal算法
#include <iostream> //并查集的kruskal算法using namespace std;const int max_ve=1005,max_ed=15005;int n,m,i; //n,m分别记录顶点数和边数struct node{int par,ans;}vertex[max_ve]; //顶点struct Edge {int u,v,weigh;}edge[max_ed]; //边int cmp(const void* a,const void* b){return (*(Edge*)a).weigh-(*(Edge*)b).weigh;}int find_p(int j) //在处理两个顶点是否在同个集合内要用到并查集{if(vertex[j].par!=j) { vertex[j].par=find_p(vertex[j].par); }return vertex[j].par;}bool union_set(int s,int t){int os=find_p(s),ot=find_p(t);if(os==ot)return false;if(vertex[os].ans>vertex[ot].ans) vertex[ot].par=os;else vertex[os].par=ot;if(vertex[os].ans==vertex[ot].ans) vertex[ot].ans++;return true;}int main(){int sum,ct; scanf("%d%d",&n,&m); for(i=1;i<=n;++i) //初始化,顶点从1到n { vertex[i].par=i;vertex[i].ans=0; }for(i=0;i<m;++i) //输入边的信息:起点,终点,权重 { scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].weigh); } qsort(edge,m,sizeof(edge[0]),cmp); sum=0;ct=0;for(i=0;i<m&&ct<n-1;++i) //当ct==n-1说明有n-1条边,即所有的顶点都已连接上,终止算法 {if(union_set(edge[i].u,edge[i].v)) {++ct; //边数+1 sum+=edge[i].weigh; } } printf("%d\n",sum); //sum为最小生成树所有边的总和 return 0;}
转载于:https://www.cnblogs.com/mjc467621163/archive/2011/07/17/2108518.html
基于并查集的kruskal算法相关推荐
- 亲戚关系关系算法java程序_C++并查集亲戚(Relations)算法实例
本文实例讲述了C++并查集亲戚(Relations)算法.分享给大家供大家参考.具体分析如下: 题目: 亲戚(Relations) 或许你并不知道,你的某个朋友是你的亲戚.他可能是你的曾祖父的外公的女 ...
- mst算法matlab_基于并查集+Kruskal算法的matlab程序及最小生成树绘图
学了一天最小生成树,稍稍总结一下,这是第一篇 kruskal算法 关于kruskal算法已有大量的资料,不再赘述,算法流程为: 得到邻接矩阵和权值: 初始化,连接距离最小的两点: 连接距离次小的两点, ...
- 并查集与贪心算法的应用之求解无向图的最小生成树
一,介绍 本文介绍使用Kruskal算法求解无向图的最小生成树.Kruskal是一个贪心算法,并且使用了并查集这种数据结构. 关于并查集的介绍,参考:数据结构--并查集的原理及实现 二,构造一个无向图 ...
- 图 相关算法~从头学算法【广搜、 深搜、 拓扑排序、 并查集、 弗洛伊德算法、迪杰斯特拉算法】
图的相关主流算法主要有: 广度优先搜索 深度优先搜索 拓扑排序 并查集 多源最短路径(弗洛伊德算法) 单源最短路径(迪杰斯特拉算法) 其中呢,最基本的是前两种,也就是平时常用的广搜和深搜,本文中将概要 ...
- 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用
二月的最后一篇水文-想写一些有意思的东西. 文章目录 环检测在图数据结构中的应用 深度/广度优先 检测环 并查集数据结构 (Union-Find) 基本概念 初始化 合并 union 查找祖先 优化1 ...
- 普林斯顿算法(1.3)并查集(union-find算法)——本质就是一个数 下面的子树代表了连在一起的点...
转自:https://libhappy.com/2016/03/algs-1.3/ 假设在互联网中有两台计算机需要互相通信,那么该怎么确定它们之间是否已经连接起来还是需要架设新的线路连接这两台计算机. ...
- 九度OJ 1024 畅通工程 -- 并查集、贪心算法(最小生成树)
题目地址:http://ac.jobdu.com/problem.php?pid=1024 题目描述: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有 ...
- 基于C语言,详解Kruskal算法(利用并查集)实现构建最小生成树
目录 一.Kruskal算法的基本介绍 具体做法:找出森林中连接任意两棵树的所有边中,具有最小权值的边,如果将它加入生成树中不产生回路,则它就是生成树中的一条边.这里的关键就是如何判断"将它 ...
- 并查集——最小连接路径和Kruskal(hdu1301)
*没听说过并查集的同学先移步看一下上篇博客http://blog.csdn.net/sm9sun/article/details/53256232 好,首先说一下并查集的标准定义: 概述: 在一些有N ...
最新文章
- iOS 直播专题5-推流
- JRE和JDK的区别分别代表什么
- Introduction to PostGIS 之线性参考、地理编码
- http协议状态码和web错误解决总结
- java如何识别tiled地图_Egret学习-TiledMap使用
- [BT5]信息收集1-2 Dnsmap
- android xml黑体字_如何在 Android 上使用思源黑体作为系统字体?
- 抓肇事车(入门级算法)(C语言)
- 使用qt制作License(原理)
- 2020年中青杯数学建模B题思路
- Vtokendapp公链诠释
- Android渠道推广方案相关知识收集
- 转:用迅雷下载Android SDK全系列
- 我就这样忍了一生——星云大师
- C语言 实现长整数的相加
- Java 计算日期差
- 【个人笔记】SIPp学习-注册,呼叫与超时
- 矩阵宏观调度:Zigzag扫描打印矩阵matrix,图像工程的一种编码
- Java进阶之--------集合2
- matlap心形代码+二维画图
热门文章
- 无符号定点数加法运算的VHDL描述
- html5 hgroup,HTML5 hgroup 标签
- 中运算符百分号作用_SQL基础知识——LIKE运算符
- mysql varchar 非空判断_工资从1万到3万,你还差mysql数据库优化之系列三
- 软件测试面试选择判断提,软件测试面试常考判断题
- android 刷windows10,微软计划在Android机上刷Windows 10
- ArcMap 导入 wrl_flmic拍摄的素材如何无损导入电脑
- Linux 终端配置
- Oracle数据库基础入门《一》Oracle服务器的构成
- windows linux 子系统折腾记