首页 > 编程语言 >最小生成树 Kruskal 算法

最小生成树 Kruskal 算法

时间:2024-04-13 10:44:40浏览次数:23  
标签:存储 Kruskal 最小 生成 算法 edge

Kruskal 算法

edge存储边起点、终点、边权

fa[x]存储x的父节点

1、先初始化父节点

2、按边的权排序(贪心思想)

3、如果不在同一集合内,把这条边加入最小生成树,并且合并两个集合,反之就跳过

4、最后根据连接的点是否是顶点的个数减一确定能否生成最小生成树

如下图,红色表示取的边和次序,先取最小的2,再3,再4最后5,此时成为生成树,并且为最小生成树

核心代码

//存储边和权
struct edge {
    int u, v, w;
    //重载运算符,排序时使用
    bool operator<(const edge& t) 
    { return w < t.w; }
}e[N];
//并查集
int fa[N];
//     输入时要用uvw,n为顶点数,m为边数,cnt为当前已经连上的边
int ii,u, v, w,       n,    m,  cnt = 0;
int ans = 0;
//并查集寻父
int find(int x) {
    if (fa[x] == x)return x;
    else return fa[x] = find(fa[x]);
}
bool kruskal() {
    //先排序
    sort(&e[1], &e[1 + m]);
    int x, y;
    rep(ii, 1, m + 1) {
        x = find(e[ii].u);
        y = find(e[ii].v);
        //如果不在同一集合中
        if (x != y) {
            //合并集合
            fa[x] = y;
            cnt++;
            ans += e[ii].w;
        }
    }
    if (cnt == n - 1) return true;
    return false;
}

例题

口袋的天空https://www.luogu.com.cn/problem/P1195

标签:存储,Kruskal,最小,生成,算法,edge
From: https://www.cnblogs.com/lulaalu/p/18132563

相关文章

  • 数据分享|R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病|附代码
    全文链接:http://tecdat.cn/?p=23061最近我们被客户要求撰写关于预测心脏病的研究报告,包括一些图形和统计输出。这个数据集可以追溯到1988年,由四个数据库组成。克利夫兰、匈牙利、瑞士和长滩。"目标"字段是指病人是否有心脏病。它的数值为整数,0=无病,1=有病数据集信息:目标:主......
  • 最短路算法(Dijkstra + SPFA + Floyd)
    最短路算法(Dijkstra+SPFA+Floyd)Dijkstra算法1.算法基本介绍Dijkstra算法通常是求解单源最短路中最快的算法,但它无法处理存在负权边的情况(原因在正确性证明中)。Dijkstra本质上是一种贪心算法,通过不断调整每个点的“当前距离”最终得到最优结果,其实后面要讲到的几种算法也大......
  • C++算法题解 - 递归实现排列型枚举 - 递归法 (图文) (递归搜索树)
    题目:递归实现排列型枚举把1∼n这n个整数排成一行后随机打乱顺序,输出所有可能的次序。输入格式一个整数n。输出格式按照从小到大的顺序输出所有方案,每行1个。首先,同一行相邻两个数用一个空格隔开。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。数据......
  • 常见的排序算法——冒泡排序(二)
    本文记述了冒泡排序微小改动的基本思想和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。◆思想更少的比较可以节省一定的时间,此改动可以减少更小范围的比较。(把水平陈列的数组逆时针旋转90°后,有助于理解后续的内容。)将包含顶层以下的所有元素作为待排序范围......
  • 算法学习笔记(13):同余最短路
    同余最短路是一种通过同余把状态分类,再通过建图跑最短路解决问题的算法。可以高效率解决一些特定的问题。非常的奇妙。算法鉴于学不懂,所以直接搬\(oi-wiki\)的题吧。呜呜呜。P3403跳楼机有一栋高为\(h\)的楼,初始在一楼,每次可以向上移动\(x\),\(y\),\(z\)层,也可......
  • 常见的排序算法——冒泡排序
    本文记述了冒泡排序的基本思想和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。◆思想(把水平陈列的数组逆时针旋转90°后,有助于理解后续的内容。)将包含顶层以下的所有元素作为待排序范围,将该范围以上的所有元素作为已排序范围。通过一一比较相邻的两个元素,自......
  • Java如何自行实现正向地理编码算法(不依赖api,不联网)
    政务场景中经常会遇到地址落图,或者三维挂接的场景。如何将文本地址转化为gps坐标是实现要解决的核心问题。addresstool为正向地理编码提供了非常简单、高效的算法。如何实现正向地理编码,只需要3步就行:第一步:带有坐标的标准地址加载到addresstool中。第二部:以业务地址作为参数,使......
  • TSINGSEE青犀AI智能分析网关V4叉车载货出入库检测算法介绍及应用
    随着物流行业的快速发展,叉车作为物流运输的重要设备,其安全性和效率性越来越受到人们的关注。然而,在实际操作中,由于人为因素和操作环境的复杂性,叉车事故时有发生,给企业和个人带来了巨大的损失。为了提高叉车运输的安全性和效率,近年来,人工智能技术逐渐应用于叉车运输领域,其中,叉车载......
  • 算法技巧_二叉树
    算法技巧(二叉树)目录算法技巧(二叉树)两种解题思路最简单的遍历二叉树代码遍历二叉树的方式前中后序遍历的区别以及各自场景技巧典型问题常见题目以及解题思路两种解题思路遍历一遍树是否可以解决问题如果可以,用一个traverse函数配合外部变量来实现。分解问题是否可以定......
  • TSINGSEE青犀AI智能分析网关V4人员睡岗检测算法介绍及应用
    人员睡岗AI算法是一种通过人工智能技术来检测和预警人员是否处于睡眠状态的算法。它主要通过分析人员的行为、姿势和身体特征等信息来判断人员是否已经进入睡眠状态。该算法通过对监控摄像头捕捉的画面进行实时分析,利用卷积神经网络(CNN)对图像进行特征提取,进而判断画面中的人员是否......