学习kruskal(最小生成树)笔记

大话数据结构学习笔记 - 图的最小生成树之Kruskal算法 大话数据结构学习笔记 - 图的最小生成树之Kruskal算法 Kruskal算法 克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法 大话数据结构定义 假设 N=(V,{E})N=(V,{E}) N = (V, \{E\})是连通网,则令最小生成树的初始状态为只有n个顶点而无边的非连通图 T={V,{}}T={V,{}} T = \{V, \{\}\}。图中每... 阅读详情
先上比葫芦画瓢的代码
#include<iostream>
using namespace std;

struct edge 
{
	int u;
	int v;
	int w;
}e[1001];

int sum = 0;
int all = 0;
int n,m;
int f[9]={0};

void quicksort(int left,int right)
{
	int i,j;
	struct edge t;
	if(left > right)
	{
		return ;
	}
	i=left;
	j=right;
	while(i != j)
	{
		//从右边开始找
		while(e[j].w>=e[left].w && i<j)
		{
			j--;
		}
		//从左面开始 
		while(e[i].w <= e[left].w && i<j)
		{
			i++;
		}
		
		//交换
		if(i<j)
		{
			t=e[i];
			e[i]=e[j];
			e[j]=t;
		} 
}
	
	//最终将基准数归位,将left和i交换
	t=e[left];
	e[left]=e[i];
	e[i]=t;
	
	quicksort(left,i-1);//处理左边 
	quicksort(i+1,right);//处理右边 
	return ; 
} 

int find(int v)
{
	if(f[v] == v)
	{
		return v;
	}
	else
	{
		f[v]=find(f[v]);
		return f[v];
	}
	
}

void  join( int v,int u)
{
	int t1,t2;
	t1=find(v);
	t2=find(u);
	if(t1 != t2)
	{
		f[t2]=t1;	
		
	}

}

int main()
{
	cin>>n>>m;
	
	for(int i=1;i<=m;i++)
	{
		cin>>e[i].u;
		cin>>e[i].v;
		cin>>e[i].w;
	}
	
	
	quicksort(1,m);
	
	
	for(int i=1;i<=n;i++)
	{
		f[i] = i;
	}
	
	
	for(int i=1;i<=m;i++)
	{
		int fa = find(e[i].u);
		int fb = find(e[i].v);
		if(fa == fb) continue;
		join(e[i].u,e[i].v);
			all ++;
		sum += e[i].w;
		cout << i << endl; 
		if(all == n-1)
		{
			break;
		}
	}
	cout<<all<<endl;
	cout<<sum<<endl;
	
	return 0;
} 

kruskal是以边为判断基准,节点是用来判断该边是否具有作为树的一部分的价值。

1,输入之类的就不说了,n个顶点,m条边。用结构体来实现,储存边的长度,两边顶点的要求。

2,对所有的边长度进行排序。

3,将没有包含在树中的顶点利用最短边引入树

4,不断重复3步。由于只引入未联通的顶点,所以当引入n-1次的话,所有的点就联通了。


关于引入部分的注意

1     引入的关键是判断是不是已经联通的顶点。

        对于所有边按升序遍历,判断该边的两个顶点是否通过其他途径已经联通。

        我所学的方法是利用并查集查找祖节点来实现的。

2     判断该节点已经在树中的话,该边遍历过不作处理。

3     该边两个节点没有通过其他途径连接的话,就将该边变为树的一部分,并将两个节点变为同一个祖先。

从设计到实战:手把手教你用SolidWorks完成一个简易离心泵叶轮的水力设计全流程 本文详细介绍了使用SolidWorks进行简易离心泵叶轮水力设计的全流程,涵盖参数计算、水力设计和三维建模等关键步骤。通过实际案例演示,帮助机械设计工程师和学生掌握从理论到实践的转化技巧,特别适合低比转速离心泵叶轮的设计需求。 阅读详情

相关推荐

C++笔试题整理

目录 1. 笔试题1 1.1 链表反转 1.2 String 2. 笔试题2 2.1 求下面函数的返回值(微软) 2.2 什么是“引用”?申明和使用“引用”要注意哪些问题? 2.3 将“引用”作为函数参数有哪些特点? 2.4 在什么时候需要使用“常引用”?  2.5 将“引用”作为函数返回值类型的格式、好处和需要遵守的规则? 2.6 “引用”与多态的关系? 2.7 “引用”与指针的区别是什么? 2.8 什么时候需要“引用”? 2.9 结构与联合有和区别? 2.10 下面关于.

星月相随的专栏 2482

学习笔记分享-进阶数据结构与算法-图-最小生成树-Prim算法、Kruskal算法

学习笔记分享-进阶数据结构与算法-图-最小生成树-Prim算法、Kruskal算法

2301_81243975的博客 786

分析国外几款主流蜜罐产品看欺骗诱捕技术的应用脉络

网络安全的本质是攻防对抗,更本质的其实是人与人心智与技术的全面较量。 欺骗诱捕技术作为攻防对抗技术中比较特殊的技术,能够使防守方更多掌握对抗中的主动权,诱导攻击,迫使攻击者耗费精力的同时,留下丰富的攻击信息。究其本质,欺骗诱捕技术更深层次考验的不止是技术的能力,还有对于攻击者作为人的理解。 国外主流蜜罐产品分析 根据MarketsandMarkets《欺骗技术市场规模、份额和2021年全球市场预测》中提到的欺骗诱捕技术全球主要供应商及产品,我们分析了几款国外主流的蜜罐产品,希望更清晰看到欺骗诱捕技术应

cdyunaq的博客 1306

NOIP学习笔记——最小生成树kruskal

1.一个最小生成树只存在于连通图中。2.假设有一个n个点,m条边的连通图(m>=n),它的最小生成树应包含n个点n-1条边。3.一个最小生成树中不应存在环。

fhhhcc的博客 735

因果推断(二):因果推断涉及的ITE、ATE、CATE等效应

因果效应也称为**处理效应(Treatment effect)**是用于评判干预与否的结果差异的指标(处理变量对结果变量的影响)。比如在接受治疗组中,如果这些人不接受治疗,这组人接受治疗和不接受治疗的效应差异是多少。定义为实验组中每个个体的处理效应差异,比如一个个体在接收治疗和不接受治疗的两个处理方式的健康程度得分的差。但是一个人因为不可能。比如我们想探究接受治疗的男性用户和不接受治疗的男性用户的平均效果差异就是CATE。前面说ITE是无法观测的,是因为一个人不能同时接受治疗又不接受治疗,这里关键的就是。

Y1n的博客 3711

3GPP LTE/NR信道模型

CDL(Clustered Delay Line):簇延迟线模型,包括CDL-A、CDL-B、CDL-C三个用于NLOS的信道模型,以及CDL-D、CDL-E两个用于LOS的信道模型。

LinkEverything的博客 1万+

算法学习笔记------最小生成树kruskal模板

上模板 const int MAX = 999999; struct edg { //边的起点,终点,权值 int start, end, value; edg(){} edg(int s, int e, int v) { start = s; end = e; value = v; } bool operator<(const edg& a)const { return v

xyccz的博客 234

TriCore架构-如何将系统刷成HSM

本文介绍了芯片刷写操作流程:首先加载project_Merge.s19文件,进入UCB界面展开BMHD0_ORIG和BMHD1_ORIG。重点说明需要将STAD地址从原始值A0000000修改为0XA00A0000,并详细描述了编辑、更新和写入芯片的步骤。最后提示在HSM刷写过程中如遇错误可能需要输入密码。该操作涉及关键地址修改,需谨慎执行。

xiandang8023的博客 95

最小生成树Kruskal算法学习笔记

最小生成树MST 定义 在一个∣V∣|V|∣V∣个点的无向连通图中,取其中∣V∣−1|V|-1∣V∣−1条边,并连接所有的顶点,所得到的子图称为原图的一棵生成树,当在一个图GGG中的所有生成树的方案集合SSS中,若有一棵生成树TTT的所有边权之和比SSS中其它生成树的边权之和都要小,那么就称TTT为GGG的MST即最小生成树。 最小边原则 图中权值最小的边(如果唯一的话)一定在最小生成树上。 唯一...

Bell的博客 393

卡尔曼滤波器中的Q,R

对于系统状态的估计(滤波结果)所使用的信息来源于两个方面,一个是对系统状态演变模型的了解,包括系统转移矩阵和输入控制矩阵,输入孔质量等,另一方面来自于对系统状态的观测量。从上面公式来看,真正所要滤波得到的结果来自于公式(4)中的系统状态估计值x的某些分量,公式(4)的结果是由公式(1)所得到的状态预测值和来自观测量y计算得到的。所以,在不同算法中,R, Q的取值根据反应的不同量纲,可以有很大的变化,但它们的比值会决定了滤波值应该更多来自于系统模型演化的信息,还是来自于观察信号信息。

qq_43416206的博客 499

C2000ware介绍

C2000的下载安装指南C2000目录。

小柚子的博客 2794

最小生成树(prim和kruskal)学习笔记

有两个求最小生成树的算法,prim算法和kruskal算法。这两种算法都可以处理边权为负的情况,并且可以处理有负权回路的情况。接下来会分析一下两个算法的区别。

2403_85701606的博客 1862

2022年8月27日全国青少年信息素养大赛Python编程小学组决赛真题+答案解析

2022年8月27日全国青少年信息素养大赛Python编程小学组决赛真题+答案解析

伶俐角少儿编程 454

最小生成树 学习笔记1 - Kruskal

最小生成树定义Kruskal算法算法流程具体实现建立结构体存边并查集维护完整代码 定义 给定一个带权图,满足以下条件: 1.保证图中所有的点都联通 2.在满足条件1的情况下尽可能去掉多的边,使得所有的边权之和最小,即Σi=1i<=mwi\Sigma_{i=1}^{i<=m}w_iΣi=1i<=m​wi​最小。 Kruskal算法 Kruskal是基于贪心的思想,根据以上的定义描述依次枚举1−m1-m1−m条边,如果两个点没有存在于一个连通分量中,那么就连上这一条边。 此算法的难点在于查

Iridescent41 的博客 424

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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

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

kruskal算法学习笔记【最小生成树】

恩,,今天感觉有点亏,好好的代码,硬是看了两个小时,结果是一个函数返回值类型错了,蠢哭了给我。。 kruskal算法思想:        本质上也是一种贪心算法,是比较好理解的。【涉及到一些并查集的思想,可以提前了解下】        给定一个图A,将该图所含所有边按长度排序【当然不止是数值上的排序,其两端带着的两点也需要紧紧跟随着这条命运未定的边】,既然是求最小生成树,当然所有边的和越小越...

二喵君的博客 420

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

填坑行动5-最小生成树kruskal学习笔记

文章目录板子题题目解析算法解析代码 板子题 题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出 orz。 输入格式 第一行包含两个整数N,MN,MN,M表示该图共有NNN个结点和MMM条无向边。 接下来MMM行每行包含三个整数Xi,Yi,ZiX_i,Y_i,Z_iXi​,Yi​,Zi​ ,表示有一条长度为 ZiZ_iZi​的无向边连接结点Xi,YiX_i,Y_iXi​,Yi​X。 输出格式 如果该图连通,则输出一个整数表示最小生成树的各边的长度之和。如果该图不连通则输出orz。 题目解

jiangtaizhe的博客 190

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

最小生成树 学习笔记(prim + kruskal)

概念 生成树:一个连通图含有全部nnn个顶点,但只有足以构成一棵树的n−1n-1n−1条边。一颗n个顶点的生成树有且仅有n−1n-1n−1条边,如果生成树当中再添加一条边,必定成环。 最小生成树(MSTMSTMST):在联通网中的所有生成树中,所有边代价最小的生成树,成为最小生成树。 prim 原理:从起点顶点开始,选择当前可用的最小权值和,把对应的顶点加入到当前建立的生成树当中。 令初始状态为uuu,所有顶点结合为VVV,当前剩余没用的顶点集合为vvv。 1.初始化:u=s,v=V−uu={s},v=V-

cqbz_luoyiran的博客 202

学习笔记--最小生成树之kruskal算法

Kruskal算法   1.概览 Kruskal算法是一种用来寻找最小生成树的算法,由Joseph Kruskal在1956年发表。用来解决同样问题的还有Prim算法和Boruvka算法等。三种算法都是贪婪算法的应用。和Boruvka算法不同的地方是,Kruskal算法在图中存在相同权值的边时也有效。   2.算法简单描述 1).记Graph中有v个顶点,e个边 2).新建图Grap

flyljg的专栏 1958

[OI学习笔记]最小生成树之Kruskal算法

Kruskal算法 接着上次的写(本来打算过几天再更的...) 上一篇博文写的是Prim算法,接着更Kruskal。 还是上次的栗子: 如果说Prim是从点的角度考虑,那么Kruskal就是从边的角度考虑。 Kruskal也是从贪心的角度解决的——从小到大连接每一条边,当我们选择一条边时,判断是否两个点是否在同一个联通...

weixin_30413739的博客 169

【学习笔记】Matlab和python双语言的学习(最小生成树——Kruskal算法、Prim算法)

通过模型算法,熟练对Matlab和python的应用。本文介绍了求解最小生成树的两种算法—— Kruskal和Prim,详细介绍了两种算法的求解思路。分别使用matlab和python进行了算法的实现。

m0_65032457的博客 1223

图论学习笔记(5):最小生成树 prim算法 和 kruskal算法

写在开头:如果你学会了Dijkstra,那么prim算法你就也掌握了差不多了,因为prim算法和Dijkstra算法实现思路是一致的,这里就不给大家展示朴素般的prim算法了,想要了解可以去看我的Dijkstra算法讲解,这里直接介绍堆优化版本的prim算法。而kruskal算法,不过是并查集的一个变式。整体都非常好理解。

m0_74707185的博客 1078

【算法学习笔记】24:Prim算法与Kruskal算法(最小生成树)

Prim算法和Dijkstra算法很相似,而且也按照是不是稀疏图分成了两种: 对于稠密图,用朴素版的Prim算法,时间复杂度O(n2)O(n^2)O(n2) 对于稀疏图,用堆优化版的Prim算法,时间复杂度O(mlogn)O(mlogn)O(mlogn) Kruskal算法的时间瓶颈在于它需要对所有边从小到大排序,所以时间复杂度是O(mlogm)O(mlogm)O(mlogm),由于m<n2m < n^2m<n2,所以mlogm<mlog(n2)=2mlognmlogm <

大桔骑士的学习笔记 1857

最小生成树 学习笔记

我们可以在选每一条边的时候,判断这一条边连接的两个点是否已经连通,如果已经连通那么这条边就是浪费的,不能选。这个算法的原理很简单:既然要让边权之和最小,那么每一次就贪心选择当前还没有选过的权值最小的边。而最小生成树是指,在一个无向图的所有生成树中,边权之和最小的生成树。donnieguo 告诉我他在学最小生成树,于是想起来了,补一篇学习笔记。,发现图中产生环,跳过这条边。,发现图中产生环,跳过这条边。,发现图中产生环,跳过这条边。,并连接 A 和 D。,并连接 D 和 F。,并连接 A 和 B。

Eason_cyx的博客 900

【学习笔记】比较分别用prim和kruskal实现最小生成树和算法优化方案

kruskal: 1.思路 :设G=(V,E)是无向连通带权图,V={,…,n};设最小生成树T=(V,TE),该树的初始状态为只有n个顶点而无边的非连通图T=(V,{}),Kruskal算法将这n个顶点看成是n个孤立的连通分支。它首先将所有的边按权值从小到大排序,然后只要T中选中的边数不到n-1,就做如下的贪心选择:在边集E中选取权值最小的边(i,j),如果将边(i,j)加入集合TE中不产生回路(圈),则将边(i,j)加入边集TE中,即用边(i,j)将这两个连通分支合并连接成一个连通分支;否则继续选择下一

qq_41358574的博客 592

例题:最短网络 图论算法之最小生成树 prim//kruskal 学习笔记

图论算法之最小生成树  prim//kruskal         最小生成树简单的说就是在一个图里选取一些边,使这些边以及它们所连接的结点组成一棵树(两两结点之间可以到达),并且使选取的边的边权最小。         它的成立条件是图是连通的。并且选取的边数为n-1。(有n个结点,n-1条边,只能为一棵树,没有别的可能)         主要有两个算法:prim和kruskal prim

zyf2000 1444

算法(第4版)学习笔记:关于Kruskal算法(求最小生成树)证明的理解

学习Kruskal算法的时候又发现了一个看不懂的证明,所以尝试用自己的方式理解Kruskal算法并尝试做出证明: Kruskal算法的实现方法如下:通过对加权图中所有的边进行排序,从最小的边开始,如果该边不能与已找到的最小生成树的边构成环,则将该边加入最小生成树中 在任何连通图中,都可以找到一颗最小生成树T。因为图是连通的,所以肯定能在保证不构成环的情况下连接图中的所有顶点找到...

qq_33265520的博客 897
上一篇: 18年蓝桥杯 B组 8标题:日志统计
下一篇: 学习笔记——prim(最小生成树)
include666
博客等级 码龄9年 12粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值