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

最小生成树——克鲁斯卡尔算法(Kruskal算法) 克鲁斯卡尔算法(Kruskal算法) 对于n个顶点的连通图而言,其生成的最小生成树有n-1条边,即可以保证从任一点出发可以到达任一点且不产生回路。 克鲁斯卡尔算法(Kruskal算法):对每条边的权值进行从小到大排序,然后从小到大取权值最小的边,如取出的边会在树中产生回路则舍去,取下一条;若不会产生回路则加入到树中。 因此Kruskal算法的关键问题就是:如何判断新加入的边是否会产生回路。 判断是... 阅读详情

Description

省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编写程序,计算出全省畅通需要的最低成本。 

 

Input

测试输入包含若干测试用例。每个测试用例的第1行给出评估的道路条数 N、村庄数目M ( < 100 );随后的 N 
行对应村庄间道路的成本,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间道路的成本(也是正整数)。为简单起见,村庄从1到M编号。当N为0时,全部输入结束,相应的结果不要输出。 

 

Output

对每个测试用例,在1行里输出全省畅通需要的最低成本。若统计数据不足以保证畅通,则输出“?”。 

 

Sample Input


 

3 3 1 2 1 1 3 2 2 3 4 1 3 2 3 2 0 100

 

Sample Output


 

3 ?

 

AC代码:

#include<cstdio> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> using namespace std; const int N=10000+20; int uset[N]; int ran[N]; struct Node {     int x,y,price; } s[N]; bool cmp(Node a,Node b) //按权值从小到大排序 {     return a.price<b.price; } void makeset(int n) //建立并查集 {     for(int i=1; i<=n; i++)         uset[i]=i,ran[i]=0; } int find(int x) {     while(uset[x]!=x)         x=uset[x];     return x; } void unionset(int x,int y) //按秩合并 {     int a=find(x),b=find(y);     if(a==b)         return ;     if(ran[a]>ran[b])         uset[b]=a;     else     {         if(ran[a]==ran[b])             ran[b]++;         uset[a]=b;     } } int kruskal(int n,int m) //克鲁斯卡尔算法 {     int res=0,i;     sort(s+1,s+n+1,cmp);     for(i=1; i<=n; i++)     {         if(find(s[i].x)!=find(s[i].y))         {             unionset(s[i].x,s[i].y);             res +=s[i].price;         }     }     return res; } int main() {     int n,m;     int i,j;     int ans=0;     while(scanf("%d%d",&n,&m)!=EOF&&n)     {         ans=0;         makeset(m);         for(i=1; i<=n; i++)             scanf("%d%d%d",&s[i].x,&s[i].y,&s[i].price);         ans=kruskal(n,m);         for(i=2; i<=m; i++) //判断所有城市有没有连到一起 及测试连通性         {             if(find(1)!=find(i))             {                 ans=-1;                 break;             }         }         if(ans==-1)             printf("?\n");         else             printf("%d\n",ans);     }     return 0; }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

克鲁斯卡尔算法(Kruskal算法)求最小生成树 克鲁斯卡尔算法(Kruskal算法)求最小生成树 克鲁斯卡尔算法,从边的角度求网的最小生成树,时间复杂度为O(eloge)。和普里姆算法恰恰相反,更适合于求边稀疏的网的最小生成树。 对于任意一个连通网的最小生成树来说,在要求总的权值最小的情况下,最直接的想法就是将连通网中的所有边按照权值大小进行升序排序,从小到大依次选择。 由于最小生成树本身是一棵生成树,所以需要时刻满足以下两点: 1.生成树中任... 阅读详情

相关推荐

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

算法描述: 假设N=(V,{E})是连通网,则令最小生成树的初始状态为只有n个顶点而无边的非连通图T{V,{}},图中每个顶点自成一个连通分量。在E中选择代价最小的边,若该边依附的顶点落在T中不同的连通分量上,则将此边加入到T中,否则舍去此边而选择下一条代价最小的边。依次类推,直到T中所有顶点都在同一连通分量上为止。 代码如下: #include "stdio.h" #inclu

HAN Kai 2491

构造最小生成树Prim算法(C语言)

通过用Prim算法构造最小生成树解决连接偏远地区村落间道路最少花费问题

ZKAI02的博客 3937

数据结构之图--最小生成树(克鲁斯卡尔(Kruskal)算法)

代码实现:#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int Status; /* Status是函...

ZHAO 2769

村村通(c++并查集案例)

村村通某市调查城镇交通状况,得到现有城镇道路统计表。表中列出了每条道路直接连通的城镇。市政府 "村村通工程" 的目标是使全市任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要相互之间可达即可)。请你计算出最少还需要建设多少条道路?第一行给出两个用空格隔开的正整数,分别是城镇数目 n 和道路数目 m;随后的 m 行对应 m 条道路,每行给出一对用空格隔开的正整数,分别是该条道路直接相连的两个城镇的编号。简单起见,城镇从 1 到 n 编号。一个整数。表示最少还需要建设的道路数目。5 21 2。

ying13924436662的博客 845

村村通工程

(Java & JS & Python & C & C++),考察:最小生成树

优快云 1万+

最小生成树算法之Prim算法

本文介绍了最小生成树的定义,Prim算法的实现步骤,通过简单举例实现了C语言编程。 1.什么是最小生成树算法? 简言之,就是给定一个具有n个顶点的加权的无相连通图,用n-1条边连接这n个顶点,并且使得连接之后的所有边的权值之和最小。这就叫最小生成树算法,最典型的两种算法就是Kruskal算法和本文要讲的Prim算法。 2.Prim算法的步骤是什么? 这就要涉及一些图论的知识了。 a.假定图的顶点集合为V,边集合为E. b.初始化点集合U={u}.//u为V中的任意选定的一点 c.从u的邻接结点中选取一点v使这两点之间的权重最小,然后将v加入集合U中. d.从结点v出发,重复c步骤,直到V={}

7-3 最小生成树构造

某地对偏远地区实行“村村通”工程,目标是使整个地区任何两个村落间都可以实现快速交通(但不一定有直接的快速道路相连,只要互相间接通过快速路可达即可)。现得到拟修建道路的费用,现请你编写程序,计算出全地区畅通需要的最低成本。

m0_63731022的博客 979

第8.1节 满足构网要求的功率器件与散热设计

摘要: 构网型变流器的功率器件选型与散热设计面临严苛要求,需综合考虑过载能力、暂态应力与可靠性。IGBT模块选型需重点评估电压/电流等级、损耗特性及结温波动,而SiC MOSFET虽具有高频低损耗优势,但面临栅极可靠性等挑战。散热设计需采用液冷等先进技术控制结温波动,并通过电热应力仿真和寿命预测实现可靠性优化。系统化选型流程需结合规范要求、工况谱分析和实测验证,为构网型变流器提供坚实的物理基础。

技术工作者 912

算法:通过克鲁斯卡尔(Kruskal)算法,求出图的最小生成树

之前我给大家分享过用普利姆(Prim)算法来求出图的最小生成树(点我去看看),今天我再给大家分享一个也是求图的最小生成树的克鲁斯卡尔(Kruskal)算法 这两个算法都是求图的最小生成树,有什么区别呢: 1、Prim算法是通过一个点来进行动态扩张,Kruskal是从零开始逐渐加入最小权的边 2、Prim算法是动态规划算法,Kruskal是将所有的边都遍历一遍,看哪些是组成最小生成树的边 接下来我们...

weixin_39448458的博客 9005

RK3588视频转码实战:如何用FFmpeg+MPP实现16路1080P硬解压(附完整命令)

本文详细介绍了如何在RK3588处理器上使用FFmpeg和MPP框架实现16路1080P视频的硬件加速转码。通过解析RK3588的视频处理架构、环境搭建步骤和实战配置,提供了完整的命令示例和性能调优建议,帮助开发者高效处理多路视频转码任务。

weixin_29233333的博客 555

03 Aras Innovator二次开发-服务端方法(二)

Aras Innovator二次开发-服务端方法书写

企业信息化(PLM,ERP.MES) 2014

最小生成树之普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法

作者:STzen 链接:https://www.jianshu.com/p/683ffde4f3a3 来源:简书 最小生成树 列子引入 如图假设v0到v8表示9个村庄,现在需要在这9个村庄假设通信网络。村庄之间的数字代表村庄之间的直线距离,求用最小成本完成这9个村庄的通信网络建设。 分析 这幅图是一个带权值的图,即网结构。 所谓最小成本,就是n个顶点,用n-1条边把一个连通图连接起来,并且使...

糖长老莫小贝的博客 2万+

基于 VS Code + CMake + Make + GNU工具链 + OpenOCD 的通用MCU开发环境搭建教程

以CH32V307(RISCV)和STM32F103(Cortex-M3)为例的Vscode+gnu单片机环境搭建。

余十三_的博客 2173

最小生成树之Kruskal克鲁斯卡尔算法

一、什么是最小生成树二、greedy algorithm贪婪算法和kruskal克鲁斯卡尔1.greedy algorithm贪婪算法2.kruskal克鲁斯卡尔3. 代码实现前言什么是生成树?什么又是最小生成树?对于一个连通图而言生成树是一个极小连通子图,之前我们说过,一个连通图的生成树可以有多个,如下图所示的连通图,就可以有三个生成树; 我们可以从上图中得出结论:①对于一个包含n个顶点的完全图有n个生成树;②而对于有n个顶点的连通图而言,生成树有n-1条边;继续观察上图,深入思考生成树中顶点和边....

ZER00000001的博客 1527

CVPR 2024 LaTeX 模板实战:从匿名提交到图表排版的避坑指南

本文详细解析CVPR 2024 LaTeX模板的使用技巧,涵盖匿名提交设置、pdfLaTeX编译器选择、图表排版优化等关键环节。通过实战案例演示智能引用、公式编号、三线表制作等专业技巧,帮助研究者高效完成论文格式规范,规避常见排版错误。特别针对双栏格式下的图片定位、跨栏表格等复杂场景提供解决方案。

weixin_42561040的博客 453

无线Mesh组网全攻略:从原理、部署到调优与排障

对于布线困难的大户型、复式楼或园区,传统的无线中继往往面临带宽减半和链路不稳定的问题。无线Mesh网络通过多跳转发与自组织路由,让每个节点无需网线即可协作扩展覆盖,并依靠动态路径选择实现自愈。其核心技术涉及802.11s、HWMP路由协议,以及802.11k/v/r协同的无缝漫游,能有效提升终端切换体验。在实际部署中,设备选型、回程频段规划与布点位置直接决定网络质量。围绕无线Mesh的组网原理、设备选型、配置调优与故障排查,提供一套工程实践参考,帮助用户在复杂环境下构建稳定高效的无缝覆盖。

weixin_34098209的博客 270

算法:图解最小生成树之克鲁斯卡尔(Kruskal)算法

我们在前面讲过的《克里姆算法》是以某个顶点为起点,逐步找各顶点上最小权值的边来构建最小生成树的。同样的思路,我们也可以直接就以边为目标去构建,因为权值为边上,直接找最小权值的边来构建生成树也是很自然的想法,只不过构建时要考虑是否会形成环而已,此时我们就用到了图的存储结构中的边集数组结构,如图7-6-7 假设现在我们已经通过邻接矩阵得到了边集数组edges并按权值从小到大排列如上图

Meditation 1万+

国科大学习资料--模式识别与机器学习(黄庆明)--期末复习题2(含答案)

国科大学习资料–模式识别与机器学习(黄庆明)–期末复习题2(含答案) 国科大学习资料–模式识别与机器学习(黄庆明)–期末复习题2(含答案) 国科大学习资料–模式识别与机器学习(黄庆明)–期末复习题2(含答案) ...

无名何许人的博客 1万+

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

1、Kruskal算法设计思想 实现克鲁斯卡尔算法的关键是准确判断选取的边是否与生成树中已有边形成回路。这可以通过判断边的两个顶点所在的连通分量来解决。克鲁斯卡尔算法为此设置了一个辅助数组vset【0~n-1】,用于判断两个顶点之间是否连通。数组元素vset【i】代表编号顶点为i的顶点所属的连通顶点集的编号,当两个顶点的集合编号不同时,加入这两个顶点构成的边到最小生成树中时一定不会形成回路。克鲁斯卡尔算法采用Node数组存放图中的所有边,采用排序的方法将所有边按权值从小到大排序。 以下代码仅供参考 以下

优快云 精品推荐 1286

SAPGUI excel 导出时遇到的运行时错误:STRING_SIZE_TOO_LARGE

当报表导出需求远超单一 XLSX 文件的物理承载力时,与其在 SAPGUI 中硬拼 2 GB 限制,不如把分页、过滤、流式写入作为设计前提。掌握 ABAP2XLSX 或 CSV + Power Query 等工具链,既能满足审计合规,又能让应用服务器远离的噩梦。祝你在下一次导出海量数据时,既高效又优雅。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 638

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C++ 最小生成树之kruskal(克鲁斯卡尔)算法

一、思路: 总共选择n- 1条边,所使用的贪婪准则是:从剩下的边中选择一条不会产生环路的具有最小耗费的边加入已选择的边的集合中。 意思就是:n个顶点,要取n-1条边,形成连通分量。每一次取权值最小的一条边,如果不形成回路就添加到最小生成树中;否则,舍弃这条边,取权值次小的边,重复前面步骤,直到取了n-1条边和所有顶结点被访问过。 最小生成树:minimum-cost ...

ChanJose的博客 1661

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【数据结构】图的最小生成树(普里姆Prim算法、克鲁斯卡尔Kruskal算法)(C语言)

一个连通图的生成树是指一个极小连通子图,它含有图中的全部顶点,但只有足以构成一棵树的 n-1 条边。在一个连通网的所有生成树中,各边代价之和最小的那棵生成树称为该连通网最小代价生成树(MST),简称为最小生成树。 利用普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法可以生成一个连通网的最小代价生成树。

weixin_51450101的博客 6139

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

数据结构—— 最小生成树连通网的两种算法区别和用法【普里姆(Prim)算法-克鲁斯卡尔(Kruskal)算法】

目录: 一:最小生成树(Minimum Cost Spanning Tree) 1.定义 成本最小 2.图形化分析 3.分析 二:普里姆算法(Prim算法) 1.定义 2.算法步骤 3.算法简单描写叙述 A:输入: B:初始化: C:反复下列操作,直到Vnew= V: D:输出: 4.图例描写叙述 5.普利姆(Prim)算法适用于求解无向图中的最小生成树 6.简单...

刘鑫磊 1万+

克鲁斯卡尔(Kruskal)算法求最小生成树

1、基本思想:设无向连通网为G=(V, E),令G的最小生成树为T=(U, TE),其初态为U=V,TE={ },然后,按照边的权值由小到大的顺序,考察G的边集E中的各条边。若被考察的边的两个顶点属于T的两个不同的连通分量,则将此边作为最小生成树的边加入到T中,同时把两个连通分量连接为一个连通分量;若被考察边的两个顶点属于同一个连通分量,则舍去此边,以免造成回路,如此下去,当T中的连通分量个数为1

Hackbuteer1的专栏 4万+

常用算法——克鲁斯卡尔(Kruskal)算法(公交站问题,最小生成树问题 )

克鲁斯卡尔算法介绍 克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法。 基本思想:按照权值从小到大的顺序选择n-1 条边,并保证这n-1 条边不构成回路 具体做法:首先构造一个只含n 个顶点的森林,然后依权值从小到大从连通网中选择边加入到森林中,并使森 林中不产生回路,直至森林变成一棵树为止 克鲁斯卡尔算法图解说明 以城市公交站问题来图解说明克鲁斯卡尔算法的原理和步骤: 代码实现 import java.util.Arrays; public class KruskalCase

笔记别偷看 4356

图解最小生成树 --- 克鲁斯卡尔算法(Kruskal)与普里姆算法(Prim)

所以选择B和F相连。第八步B-A-H-G-F-C-I-D组成集合M,剩下的点到这个集合的距离的最小值是9,也就是E到M的距离,也就是E到D的距离。第七步B-A-H-G-F-C-I组成集合M,剩下的点到这个集合的距离的最小值是7,也就是D到M的距离,也就是D到C的距离。第六步B-A-H-G-F-C组成集合M,剩下的点到这个集合的距离的最小值是2,也就是I到M的距离,也就是I到C的距离。第五步B-A-H-G-F组成集合M,剩下的点到这个集合的距离的最小值是4,也就是C到M的距离,也就是C到F的距离。......

weixin_60569662的博客 4039
上一篇: 树的创建以及先序 中序 后序遍历
下一篇: (poj 2377)Kruskal算法 最大生成树
Puppet__
博客等级 码龄9年 319粉丝 328原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值