克鲁斯卡尔(Kruskal)算法
克鲁斯卡尔(Kruskal)算法
最小生成树
一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。 [1] 最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法求出。
“最小生成树”百度词条
构造最小生成树的算法的基本原则
- 尽可能选取权值最小的边,但不能构成回路
- 选择n-1条边构成最小生成树
克鲁斯卡尔算法思想
设G=(V,E)是具有n个顶点的连通网,T=(U,TE)是其最小生成树。
- 1、选取权值最小的边(Vi,Vj),若边(Vi,Vj)加入到TE后形成回路,则舍弃该边,否则将该边加入到TE中。
- 2、重复1,知道TE中含有n-1条边为止
实例(转载)
同大话数据结构上的实例
实例(转载)
MSTEdge * Kruskal_MST(ELGraph * G)
/*用Kruskal算法构造图G的最小生成树*/
{MSTEdge TE[];
int j,k,v,s1,s2,Vset[];
WeightType w;
Vset=(int *)malloc(G->vexnum*sizeof(int));
for(j=0;j<G->vexnum;j++)Vset[j]=j;/*初始化数组Vset[n]*/
sort(G->edgelist);/*对表按权值大小排序*/
j=0;k=0;
while(k<G->vexnum-1&&j<G->edgenum){s1=Vset[G->edgelist[j].vex1];s2=Vset[G->edgelist[j].vex2];/*若边的两个顶点的连通分量编号不同,边加入到TE中*/if(s1!=s2){TE[k].vex1=G->edgelist[j].vex1;TE[k].vex2=G->edgelist[j].vex2;TE[k].weight=G->edgelist[j].weight;k++;for(v=0;v<G->vexnum;V++)if(Vset[v]==s2) Vset[v]=s1;}//if#j++;}//while#free(Vset);return(TE);
}
注
克鲁斯卡尔算法操作分为【对边的权值排序部分】和【一个单重for循环】,它们是并列关系,由于排序耗费时间大于单重循环,所以克鲁斯卡尔算法的时间主要耗在排序上。排序和图中边的数量有关,因此适合稀疏图。
克鲁斯卡尔(Kruskal)算法相关推荐
- 数据结构与算法(7-3)最小生成树(普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法)
目录 一.最小生成树简介 二.普里姆算法(Prim) 1.原理 2.存储 2-1.图顶点和权: 2-3. 最小生成树: 3.Prim()函数 3-1.新顶点入树 3-2.保留最小权 3-3. 找到最小 ...
- 对下图所示的连通网络G,用克鲁斯卡尔(Kruskal)算法求G的最小生成树T,请写出在算法执行过程中,依次加入T的边集TE中的边。说明该算法的基本思想及贪心策略,并简要分析算法的时间复杂度
对下图所示的连通网络G,用克鲁斯卡尔(Kruskal)算法求G的最小生成树T,请写出在算法执行过程中,依次加入T的边集TE中的 边.说明该算法的基本思想及贪心策略,并简要分析算法的时间复杂度
- 【算法】克鲁斯卡尔 (Kruskal) 算法
目录 1.概述 2.代码实现 2.1.并查集 2.2.邻接矩阵存储图 2.3.邻接表存储图 2.4.测试代码 3.应用 本文参考: <数据结构教程>第 5 版 李春葆 主编 1.概述 (1 ...
- 算法之克鲁斯卡尔(Kruskal)算法
克鲁斯卡尔(Kruskal)算法 克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法. 基本思想:按照权值从小到大的顺序选择n-1条边,并保证这n-1条边不构成回路 具体做法:首先 ...
- 算法:通过克鲁斯卡尔(Kruskal)算法,求出图的最小生成树
之前我给大家分享过用普利姆(Prim)算法来求出图的最小生成树(点我去看看),今天我再给大家分享一个也是求图的最小生成树的克鲁斯卡尔(Kruskal)算法 克鲁斯卡尔(Kruskal)算法,就相当于先 ...
- 普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法
图是一种基础又重要的数据结构,图的生成树是图的一个极小连通子图.最小生成树是无向连通网的所有生成树中边的权值之和最小的一棵生成树.求图的最小生成树可以牵引出很多经典的题目,例如在N个城市之间建立通讯网 ...
- Java实现之克鲁斯卡尔(Kruskal)算法
一.问题引入 1.问题引入 1)某城市新增7个站点(A,B,C,D,E,F,G),现在需要修路把7个站点连通 2)各个站点的距离用边线表示(权),比如A-B距离12公里 3)问:如何修路保证各个站点都 ...
- 【数据结构与算法】克鲁斯卡尔(Kruskal)算法
一,应用场景 公交站问题 1)某城市新增7个站点(A,B,C,D,E,F,G),现在需要修路把7个站点连通 2)各个站点的距离用边线表示(权),比如 A - B距离12公里 3)问:如何修路保证各个站 ...
- 普里姆算法(Prim)和克鲁斯卡尔(Kruskal)算法
普里姆算法(Prim)和克鲁斯卡尔(Kruskal)算法 普里姆算法的基本思想: 取图中任意一个顶点 v 作为生成树的根,之后往生成树上添加新的顶点 w.添加顶点w的条件为:w 和已在生成树上的顶点v ...
- 7、最小生成树,克鲁斯卡尔(Kruskal)算法
1)算法的基本思想: 前面我们学习过Prim算法,他是一种以某个节点出发,按权值递增的次序选择合适的边来构造最小生成树的方法,他的时间复杂度为O(n2),与顶点有关,而与边无边,所以适合求边稠密的图的 ...
最新文章
- 【工具类】JDBCUtils,数据库连接池
- python ui自动化配置文件,python UI自动化实战记录八:添加配置
- Stable Sort Aizu - ALDS1_2_C
- 蔚来发布首款自动驾驶车型ET7 补贴前起售价44.8万元
- 分治法求两个等长升序序列的联合中位数
- 计算机四级数据库往年考试题,全国计算机等级考试四级数据库论述题历年真题(四年)...
- “元宇宙”究竟是什么?我用最通俗的大白话给IT人说清楚
- 给MTL库添加求行列式值
- java疯狂讲义笔记整理(第二版第一部分)
- 解决Chrome浏览器中使用showModalDialog返回值为undefined
- c语言怎么添加按钮,关于用C语言制作按钮的问题
- Qt自定义Combobox实现列表上拉展示
- Kubernetes
- 调用win api将指定名称的打印机设置为默认打印机
- Linux故障——开机显示!!!failed to loadSELinux policy,freezing...
- ocx 加载 页面卡死
- 计算机无法连接网络错误651,电脑宽带连接651错误的解决方法
- R720服务器打开Linux,戴尔服务器(R720\R820)在linux6.4下双网卡绑定具体步骤
- Cisco路由器重置enable密码步骤
- 企业绿色创新转型-2002-2020工业企业科技创新指标汇总
热门文章
- 安排,Mycat教程-分布式数据库中间件课程
- Linux下ion内存,android内存管理-ION/PMEM
- C#使用MongoDB
- 关于“回车”的有趣历史 及 “回车”与“换行”的区别
- Oracle11g密码过期(默认180天)及设置密码无限期的方法
- CPU与主板如何搭配---2(转)
- kafka远离_在远离社会的时代如何保持生产力
- python爬虫案例——证券之星股票数据采集
- 几何向量:向量乘法(点乘)
- react中key的作用