最小生成树

数据结构--最小生成树详解 前言 A wise man changes his mind,a fool never. Name:Willam Time:2017/3/11、什么是最小生成树现在假设有一个很实际的问题:我们要在n个城市中建立一个通信网络,则连通这n个城市需要布置n-1一条通信线路,这个时候我们需要考虑如何在成本最低的情况下建立这个通信网? 于是我们就可以引入连通图来解决我们遇到的问题,n个城市就是图上的n 阅读详情

最小生成树

构成生成树的准则有三条:
<1> 必须只使用该网络中的边来构造最小生成树。
<2> 必须使用且仅使用n-1条边来连接网络中的n个顶点
<3> 不能使用产生回路的边。

普里姆(Prim)算法

以某顶点为起点,逐步找各各顶点上最小权值的边来构建最小生成树

1. 代码

void MiniSpanTree_Prim(MGraph G)
{
    int min, i, j , k;
    int adjvex[MAXVEX];   //保存相关顶点下标
    int lowcost[MAXVEX];  //保存相关顶点间边的权值
    lowcost[0] = 0;       //v0作为最小生成树的根开始遍历,权值为0  凡是lowcost数组的值被设置为0则表示纳入最小生成树
    adjvex[0] = 0;        //v0第一个加入
    for(i = 1; i < G.numVertexes; i++)
    {
        lowcost[i] = G.arc[0][i]; //将邻接矩阵第0行所有权值先加入数组
        adjvex[i] = 0;            //初始化全部先为v0的下标
    }
    //真正构造最小生成树的过程
    for(i = 1; i < G.numVertexes; i++)
    {
        min = INFINITY; //初始化最小权值为65535等不可能权值
        j = 1;
        k = 0;
        //遍历全部顶点
        while(j < G.numVertexes)
        {
            //找出lowcost数组已存储的最小权值
            if(lowcost[j] != 0 && lowcost[j] < min)
            {
                min = lowcost[j];
                k = j; //将发现的最小权值的下标存入k 以便使用
            }
            j++;
        }
        //打印当前顶点边中权值最小的边
        printf("(%d, %d)", adjvex[k], k);
        lowcost[k] = 0; //将当前顶点的权值设置为0, 表示顶点已经完成任务,进行下一个顶点的遍历
        //邻接矩阵k行逐个遍历全部顶点
        for(j = 1; j < G.numVertexes; j++)
        {
            if(lowcost[j] != 0 && G.arc[k][j] < lowcost) //lowcost[j] != 0表示已经是生成树的顶点不参与最小权值的查找
            {
                lowcost[j] = G.arc[k][j];
                adjvex[j] = k;
            }
        }
    }
}

2. 解析

简单描述

<1> 设一个有n个顶点的连通网络为G(V,E),最初先构造一个只有n个顶点,没有边的非连通图T={V,空},图中每个顶点自成一格连通分量。
<2> 在E中选择一条具有最小权植的边时,若该边的两个顶点落在不同的连通分量上,则将此边加入到T中;否则,即这条边的两个顶点落到同一连通分量 上,则将此边舍去(此后永不选用这条边),重新选择一条权植最小的边。
<3> 如此重复下去,直到所有顶点在同一连通分量上为止。

详解

普里姆算法详解

克鲁斯卡尔(Kruskal)算法

从边出发,直接去找最小权值的边来构建最小生成树,构建时要考虑是否会形成环路

1. 代码

typedef struct Edge
{
    int begin;
    int end;
    int weight;
}Edge;

int Find(int *parent, int f) //查找连线顶点的尾部下标
{
    while(parent[f] > 0)
    {
        f = parent[f];
    }
    return f;
}
//生成树
void MiniSpanTree_Kruskal(MGragh G)
{
    int i, n, m;
    Edge edges[MAXEDGE];
    int parent[MAXVEX]; //定义一维数组用来判断边与边是否形成回路
    //此处省略将邻接矩阵G转化为边集数组edges并由小到大排序的代码
    for(i = 0; i < G.numVertexes; i++)
    {
        parent[i] = 0;
    }
    for(i = 0; i < G.numEdges; i++)
    {
        n = Find(parent, edges[i].begin);
        n = Find(parent, edges[i].end);
        if(n != m) //不等 则表明没有形成回路
        {
            parent[n] = m; //将此边的结尾顶点放入下标为起点的parent中,表示此顶点已经在生成树集合里
            printf("(%d, %d) %d", edges[i].begin, edges[i].end, edges[i].weight);
        }
    }
} 

2. 解析

简单概述

①记Graph中有v个顶点,e个边
②新建图Graphnew,Graphnew中拥有原图中相同的e个顶点,但没有边
③将原图Graph中所有e个边按权值从小到大排序
④环:从权值最小的边开始遍历每条边 直至图Graph中所有的节点都在同一个连通分量中 如果这条边连接的两个节点于图Graphnew中不在同一个连通分 添加这条边到图Graphnew中

详解

克鲁斯卡尔算法详解

总结

普里姆算法主要针对顶点展开,即边数非常多的情况下更好,适合稠密图
克鲁斯卡尔算法主要针对边,边数少效率更高,适合稀疏图

最小生成树算法总结 算法总结第5弹,最小生成树,有关生成树的问题有很多,这里先介绍个最常用的吧。 最小生成树 首先,生成树是建立在无向图中的,对于有向图,则没有生成树的概念,所以接下来讨论的图均默认为无向图。对于一个有n个点的图,最少需要n-1条边使得这n个点联通,由这n-1条边组成的子图则称为原图的生成树。一般来说,一个图的生成树并不是唯一的(除非原图本身就是一棵树)。 现在考虑带权图G,即图的边带权,则 阅读详情

相关推荐

什么是最小生成树以及如何构建

文章目录一,概念回顾 - 生成树1.1 什么是生成树1.2 如何建立无向图的生成树二,最小生成树(Minimum Spanning Trees)2.1 最小生成树的典型用途2.2 构造最小生成树(MST)2.2.1 MST 性质2.2.2 Prim 算法构建最小生成树2.2.3 Kruskal 算法构建最小生成树2.2.4 Prim 与 Kruskal 算法比较 预习:图的基本概念及图演算法 一,概念回顾 - 生成树 1.1 什么是生成树 生成树:所有顶均由边链接在一起,但不存在回路的图。 多一条边会出现

壮壮不太胖的学习笔记 5396

最小生成树详解

最小生成树来啦!

m0_69349401的博客 1万+

算法——最小生成树

最小生成树(Minimum Spanning Tree,简称MST)是指一张连通图的子图,它包含图中的所有顶点,并且是图中所有生成树中权值之和最小的一个。最小生成树常用于解决网络设计、电力传输、道路规划等问题。祝您好运!

百锦再的博客 1万+

最小生成树-Kruskal(克鲁斯卡尔)算法解析

与prim算法一样,Kruskal算法也是为了图的最小生成树而产生的算法,改算法规定,先将所有边的权值按照小到大排序,每条边的起点和终点也需要加上,先从权值最小的边开始连接,每次连接前判断需要连接的顶点是否会导致树变成环,如果会导致这种情况,则跳过该边,进行下一条边的判定,直到获取该无向加权图的最小生成树。 如下图: 首先先建表观察 begin end weight edges...

三千炼心的博客 400

点云入门笔记(一):点云数据及获取

点云概念: 点云是某个坐标系下的点的数据集。点包含了丰富的信息,包括三维坐标 X,Y,Z、颜色、分类值、强度值、时间等等。

wc19862274581的博客 2万+

别再手动测接口了!用Pytest+Requests+Allure搭建你的第一个自动化框架(附完整源码)

本文详细介绍了如何使用Pytest+Requests+Allure搭建Python接口自动化测试框架,涵盖环境准备、核心组件封装、测试用例设计、报告生成及CI/CD集成等关键步骤。通过实战案例和完整源码,帮助开发者快速构建高效的接口自动化测试解决方案,提升测试效率和质量。

weixin_42546508的博客 321

最小生成树(算法篇)

本文将会讲解算法之中的最小生成树,最小生成树按理来说是一个数据结构,但是形成最小生成树的算法相比较才更重要,本文将会讲解prim和krusal算法来生成最小生成树

hellmorning的博客 1857

告别重打包:在Android 9上实现免Root的Frida-Gadget持久化Hook(附AOSP源码修改详解)

本文详细介绍了在Android 9上实现免Root的Frida-Gadget持久化Hook技术方案。通过修改AOSP源码,绕过传统重打包方式面临的签名校验和完整性检查,实现在非Root环境下的系统级Hook。文章包含核心代码修改、编译配置调整及调试技巧,为移动安全研究提供高效稳定的解决方案。

weixin_33726313的博客 501

最小生成树—prime算法

生成树 一个连通图的生成树是该连通图的一个极小连同子图,它含有图中全部顶点,和构成一棵树的(n-1)条边。 如果在一棵生成树上添加任何一条边,必定构成一个环,因为这条边使得它依附的那两个顶点之间有了第二条路径。 一棵有n个顶点的生成树(连通无回路图)有且仅有(n-1)条边,但是,有(n-1)条边的图不一定都是生成树。如果一个图有n个顶点和小于(n-1)条边,则是非连通图;如果它有多于(n-1)条边,则一定有回路。 如果图中任意两点都是连通的,那么图被称作连通图。 如果此图是有向图,且双向都有路径,则称为强

weixin_46157720的博客 1万+

地瓜派RDK X5部署YOLOv11n避坑指南:从Softmax瓶颈到BPU加速的实战解析

本文详细解析了在地瓜派RDK X5开发板上部署YOLOv11n模型时,从性能暴跌到成功优化的全过程。核心在于通过配置`node_info`将模型中的Softmax算子强制在BPU上以int16精度运行,解决了因算子被分配到CPU导致的严重性能瓶颈。实战部署后,模型推理延迟从126ms降至10.8ms,FPS从7.9提升至92.3,实现了显著的性能优化。

beta5的博客 865

实现敌人跟随玩家。(Unity)

首先和玩家设置一模一样,给敌人添加一个刚体,设置一个碰撞器,并设置一个触发器。然后在对场景里面的组件添加导航网格代理并且进行bake烘焙,那样的话敌人就可以在进行烘焙的位置进行移动。创建脚本,并且挂载脚本到敌人的组件上,用代码进行实现效果,并且要挂载目标对象。

weixin_57813136的博客 1869

prim算法求最小生成树

最小生成树(Minimum Spanning Tree,简称MST)是图论中的一个概念。给定一个连通的无向图,最小生成树是指包含图中所有顶点的一棵树,且该树的所有边的权重之和最小。连通性:最小生成树必须包含图中的所有顶点,并且通过边将它们连接起来,确保整个图是连通的,即任意两个顶点之间都有路径。(一颗有 n 个顶点的生成树有且仅有 n−1 条边,如果生成树中再添加一条边,则必定成环。无环:最小生成树是一棵树,所以不能包含任何环(即回路)。最小权重:最小生成树的边权重之和应当尽可能地小。

sin1810335764的博客 4676

GEE APP:基于Sentinel-2遥感影像的植被指数(NDVI)和水体指数(NDWI)可视化应用

本文介绍了利用Google Earth Engine(GEE)平台处理Sentinel-2卫星数据的方法,重点讲解NDVI(归一化植被指数)和NDWI(归一化水体指数)的计算与应用。内容包括环境准备、数据加载与处理、指数计算原理、可视化方法以及实际应用案例。教程详细展示了如何定义研究区域、加载影像数据、进行指数运算,并生成专业统计报告和图例。文章还提供了常见问题解答和最佳实践建议,为生态环境监测、农业评估和水资源管理等场景提供了实用工具。通过JavaScript代码示例,读者可以快速掌握GEE平台的遥感影像

此星光明博客 273

MATLAB 最小生成树

本文介绍了 MATLAB 中如何求解最小生成树。

小嗷犬的博客 4430

【实战篇】【硅基流动API+Cherry Studio搭建个人知识库全流程解析:从零到精通的超详细指南】

在人工智能技术高速发展的今天,基于大语言模型的知识库已成为开发者提效的必备工具。然而云端服务存在响应延迟、数据隐私、硬件依赖等痛点。通过硅基流动API与的深度整合,我们既能享受大模型的强大能力,又能实现本地化部署与高效管理。本文将从环境配置到高阶调优,手把手带你构建企业级知识库系统。

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 1082

银河麒麟桌面系统批量交付:封装自动化ISO镜像,百台装机效率提升10倍

麒麟桌面系统自动化ISO镜像定制摘要 本文详细介绍麒麟桌面版ISO安装镜像的定制方法,通过修改系统文件实现自动化安装部署。主要内容包括:1) 挂载原版ISO并提取文件;2) 使用unsquashfs解压系统文件进行定制化修改,包括添加系统标记配置;3) 配置ky-installer.cfg自动应答文件,设置安装参数如用户名、密码、分区方案等;4) 修改grub引导配置启用自动安装模式。该流程支持磁盘加密、自定义分区、自动登录等功能,生成的定制镜像可满足批量部署需求,显著提升系统安装效率。

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 1508

最小生成树算法的相关变形题

由于吉大近几年的考试中,算法大题里频繁地出现最小生成树算法的变形题,因此在此整理一下。PS:prim算法不管是画图还是代码题真的难用,kruskal算法才是永远滴神。

销夜的博客 1932

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

最小生成树刷题汇总

Acwing 346 走廊泼水节 给定一棵 N 个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小生成树仍然是这棵树。 求增加的边的权值总和最小是多少。 注意: 树中的所有边权均为整数,且新加的所有边权也必须为整数。 输入格式 第一行包含整数 tt,表示共有 tt 组测试数据。 对于每组测试数据,第一行包含整数 NN。 接下来 N−1N−1 行,每行三个整数 X,Y,ZX,Y,Z,表示 XX 节点与 YY 节点之间存在一条边,长度为 ZZ。 输出格式 每组数据输出一个整数,表示权值总和最

徒手拆机甲的博客 1933

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

图论:最小生成树

本文介绍了两种最小生成树算法:Prim算法和Kruskal算法。Prim算法采用贪心策略,从节点角度构建最小生成树,通过维护节点到树的距离实现优化,适用于稠密图,时间复杂度为O(V²)或O(ElogV)。Kruskal算法通过边构建最小生成树,使用并查集判断连通性,按边权排序后逐步选择边,适用于稀疏图,时间复杂度为O(ElogE)。文章详细分析了两种算法的实现步骤、模板代码(包括邻接矩阵和邻接表版本)以及适用场景,并通过寻宝问题展示了具体应用。两种算法各有优势,应根据图的稠密程度选择合适的实现方式。

豪德又AC啦 1835

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

最小生成树的一些性质和理解

1)       定义在一棵树里添加一条边,并在产生的圈里删除一条边叫做一次操作。(也就是说换掉一条边并且保证结果是树),则树A和B是无向图的两个生成树,则A可以通过若干次操作变成B。   证:把树看作边的集合,如果B中有一条A没有的边,则把这条边加到A上,A产生一个圈中至少有一条是B中没有的边,把这条边删掉,则A仍然是生成树,A,B集合相同的边多了一条,重复这个过程直到A B包含的边相同。

zengchenacmer的专栏 9133

图论——最小生成树

最小生成树(MinimumSpanningTrees)的概念连通图的一颗生成树(SpanningTree)是包含图的所有顶点的连通无环子图(也就是一棵树)。加权连通图的一颗最小生成树是图的一颗权重最小的生成树,其中,树的权重定义为所有边的权重总和。)将加权图每个顶点都看做森林,然后将图中每条邻接边的边权按照升序的方式进行排列,接着从排列好的邻接边表中抽取边权最小的边,写入该边的起始顶点和结束顶点,连接顶点将森林构成树,然后读取起始结束顶点的邻接边,优先抽取边权小的邻接边,继续连接顶点将森林构成树。...

faith_xy的博客 3766
上一篇: 图的遍历
下一篇: 最短路径
ZoeLandia
博客等级 码龄6年 734粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值