最小生成树--Kruskal

Kruskal算法求解最小生成树 阅读详情

Kruskal 代码模板

基本思路:
        新手初学,使用优先队列,免去排序;并查集判环,过程中进行了路径压缩,以提高效率; 然后贪心建立最小生成树, min为最小权值;

        另外,同为最小生成树的Prime算法和Kruskal算法的适用问题:
               因为Prime算法只于顶点有关,所以它更适用于稠密图;
               而Kruskal算法依据于边的权值,所以边越少它速度越快,更适合稀疏图。

#include <stdio.h>
#include <queue>
#define N 100

using namespace std;

struct Node{
	int start;
	int end;
	int price;
	friend bool operator < (const Node& a, const Node& b){
		return a.price > b.price;
	}
};

priority_queue<Node>q;
int v, l;					// v为顶点数, l为边数
int father[N];

int get_father(int cur)
{
	return cur == father[cur] ? cur : father[cur] = get_father(father[cur]);		// 路径压缩
}

int join(int start, int end)
{	
	int root1 = get_father(start);
	int root2 = get_father(end);

	if(root1 == root2)
		return 0;
	father[root1] = root2;
	return 1;
}

int kruskal()
{
	int ans = 0;
	Node cur;

	while(!q.empty()){			// 此处可记录边数,以优化
		cur = q.top();
		q.pop();

		if(join(cur.start, cur.end)){
			printf("%d -> %d\n", cur.start, cur.end);		// 输出路径
			ans += cur.price;
		}
	}

	return ans;
}

int main()
{
	int i;
	Node a;
	scanf("%d%d", &v, &l);
	for(i = 0; i < v; i ++){
		father[i] = i;
	}

	for(i = 0; i < l; i ++){
		scanf("%d%d%d", &a.start, &a.end, &a.price);
		q.push(a);
	}

	printf("\nRoad: \n");

	int min = kruskal();			// 最小生成树

	printf("LowLoad: %d\n", min);

	printf("\nFather:  \n");		// 输出father数组
	for(i = 0; i < v; i ++)
		printf("%d ", father[i]);
	printf("\n");
	
	return 0;
}


MATLAB实现Kruskal算法求解最小生成树 图论是数学的一个分支,专注于研究图的性质,它由点(顶点)和线(边)组成,用于建模连接关系。图论在计算机科学、运筹学、工程学以及社会科学等领域有着广泛的应用。图论中的概念,如路径、回路、连通性以及最小生成树等,在解决实际问题,如网络设计、电路布线和社交网络分析中扮演着重要角色。Kruskal算法是一种用来寻找最小生成树(MST, Minimum Spanning Tree)的贪心算法,由数学家Joseph Kruskal于1956年提出。 阅读详情

相关推荐

kruskal算法可视化(js实现)

这是山东大学可视化课程项目,用js做的可以显示kruskal算法执行过程的网页,可交互

最小生成树的Kruskal算法-详解

最小生成树的Kruskal算法 一、 什么是最小生成树 1.1 最小生成树定义: 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法求出。 1.2 例子: 通俗易懂的讲就是最小生成树包含原图的所有节点而只用最少的边和最小的权值距离 1.3 理解 最小生成树: 将最小生成树拆分成: 最小 生成 树 树: • 树中没有环 • 所有的顶点都要在树中 • 对于N条

DUdU_23456的博客 2万+

Kruskal.js:克鲁斯卡尔算法

Kruskal.js kruskal算法依赖性/ Dependencia var _ = require('underscore'); // npm安装underscore-node var dialog = require('dialog'); // npm安装节点对话框var colors = require('colors'); // npm安装颜色 附言终端上的调试模式

Kruskal算法:最小生成树的构建

Kruskal算法避圈法的代码实现

m0_68805093的博客 4883

kruskal最小生成树实现

c++编的kruskal法最小生成树的实现

为什么需要知识图谱?什么是知识图谱?——KG的前世今生

我的知乎专栏,对知识图谱感兴趣的朋友可以关注。标题的命名顺序可能让有的读者不太习惯。通常在介绍一个陌生事物的应用前,我们先给出其定义。之所以换个顺序,是为了不让读者一开始就接触比较冰冷生硬的概念刻板描述(后面我尽量用更具体、准确的例子来表达),另一方面也是为了通过现实生活中的例子自然的引入知识图谱的概念。希望通过这种方式加深读者的印象和理解。为了减轻读者理解的负担,我尽可能地避免引入过多的概念和技术

SimmerChan的专栏 8万+

图详解第三篇:最小生成树(Kruskal算法+Prim算法)

最小生成树:Kruskal算法+Prim算法

m0_70980326的博客 2万+

数据中心机房建设标准及依据

深刻理解、尊重并恪守这些依据,是我们以科学、经济、可靠的方式,为蓬勃发展的数字经济筑牢基石的唯一路径。让我们共同努力,以标准为依据,以匠心为精神,建造更多世界一流的高效能、高可用、高智能的绿色数据中心,共同赋能数字中国的宏伟事业,支撑中华民族在数字时代的伟大复兴征程中稳步前行!今天我将力图以宏大的视角和深入的剖析,系统性地阐述数据中心机房建设所应遵循的多层次、多维度的标准依据,揭示这些依据背后的深层逻辑与时代使命,并探讨其如何共同作用于一座世界级数据中心的诞生。,以支持万兆乃至更高速率的传输。

qq_39980997的博客 1139

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

算法是一种用来在加权连通图中寻找最小生成树的算法,其操作对象是。1. 从加权图中的找出;初始时,所有边都不属于最小生成树,最小生成树为。2. 从不属于最小生成树的边中,判断最小边及其连接的两个顶点加入到最小生成树。a)若不形成环路,则将此最小边及其连接的顶点并入最小生成树;b)若形成环路,则永远不再看此边,然后从剩下的且不属于最小生成树的边中,寻找权值最小的边。3. 重复上述步骤,直至所有顶点均连接在一起,并没有形成环路时,最小生成树就找到了。

qq_64485082的博客 1万+

56-FMC连接器电路设计

FMC连接器电路设计

weixin_66510961的博客 4722

别再为跨页读写发愁了!STM32F407模拟I2C驱动24C256/512的避坑指南

本文详细解析了STM32F407模拟I2C驱动24C256/512的跨页写入问题,揭示了24C系列存储器'写满一页不会自动翻页'的关键机制,并提供了经过验证的分页写入算法和优化方案。通过GPIO时序优化、地址计算和错误处理等技巧,帮助开发者解决数据错乱、覆盖等常见问题,实现稳定可靠的EEPROM读写操作。

weixin_42631411的博客 376

【算法】Kruskal最小生成树算法

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

Eristic0618的博客 3404

国产系统迁移实战:在银河麒麟V10上搞定Wine32位支持,让老Windows软件跑起来

本文详细介绍了在银河麒麟V10操作系统上构建Wine32位支持的全过程,帮助用户解决Windows应用迁移难题。从系统架构差异分析到Wine环境配置,再到实战应用部署与优化,提供了一套完整的解决方案,确保老Windows软件在国产系统上稳定运行。

weixin_32288959的博客 649

最小生成树-Kruskal算法

数据结构:最小生成树-Kruskal算法 Kruskal算法采用的是边贪心思想,我们先大概讲一下它的大概思想,首先我们先假设先隐藏所有的边,这样每个点会成为一个连通块。 步骤1:先对图中所有的边按照权值进行排序 步骤2:如果当前这条边的两个顶点不在一个连通块里面,那么咋就用并查集的Union函数把他们合并在一个连通块里面(也就是把他们放在最小生成树里面),如果再在一个并查集里面,我们就舍弃这条边,不需要这条边。 步骤3:一直执行步骤2,知道当边数等于定点数的数目减去1,那就说明这n个顶点就连合并在一个集合

qq_49786613的博客 2万+

基于粒子群优化的PID控制在药液流量控制系统中的应用

本文提出了一种基于粒子群优化(PSO)的PID控制算法,用于药液流量控制系统。系统采用C37控制器和Codesys 2.3编程环境实现,通过传感器实时监测流量、压力和车速,并控制水泵占空比和电动球阀开度来精确调节药液流量。硬件配置包括FT-2000流量传感器、PT-3000压力传感器和MV-500电动球阀等。控制算法将PSO与PID结合,使用ITAE指标优化PID参数,在Codesys中实现了包含PSO优化循环、PID控制等功能的程序模块。该系统通过分层控制策略和智能优化算法,提高了药液流量控制的精度和响应

AI的内部世界的博客 250

RK3568平台开发系列讲解(NPU篇)什么是RKNPU

📢本篇章将介绍RKNPU。

内核笔记 4354

《最小生成树算法详解:Kruskal的优雅实现》

K算法, Kruskal算法是一个经典的贪心算法,用于解决最小生成树问题。它由美国数学家Joseph B. Kruskal在1956年提出,因此该算法得名Kruskal。

博客网站地址: https://arsenova.xyz 我会将优快云上的博客重修一部分迁移到网站上。 文章会做同步更新,但我不会在这个糟糕的平台多待1秒。下面是我要说的话,save your time. keep going 1694

华为OD机试双机位C卷:打印机队列 (C++/Py/C/Java/Js/Go)

华为OD机试双机位C卷 打印机队列,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 打印机队列。

qq_45776114的博客 1793

【MATLAB】最小生成树Kruskal算法

目录1.Kruskal算法1.1 基本思想1.2 步骤2.算法实现2.1 存储结构2.2 MATLAB代码 1.Kruskal算法 1.1 基本思想 将图的n个顶点看作n个分离的部分树,每个树具有一个顶点,算法的每一步就是选择连接两个分离树的具有最小权值的边,将两个树合二为一,直到只有一个树为止(进行n-1步)得到最小生成树。 1.2 步骤 ∙\bullet∙ 选择边e1,使得w(e1)尽可能小。 ∙\bullet∙ 再次选择最小边,必须满足不构成圈且边权尽可能小。 ∙\bullet∙ 直到不能满足则停止

taoxing 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Prim和Kruskal最小生成树

题目描述 给出一个矩阵,要求以矩阵方式单步输出最小生成树生成过程。要求先输出Prim生成过程(以点0作为起始点),再输出Kruskal,每个矩阵输出后换行。注意,题中矩阵表示无向图 输入 结点数 邻接矩阵 输出 Prim: 矩阵输出 Kruskal: 矩阵输出 题解 将以下代码全部合并即为正确答案 //运行程序所需要完成的结构体和类定义以及函数 #include <iostream> #include <queue> #include <map> using names

weixin_50305032的博客 1285

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

kruskal算法_最小生成树算法——kruskal

如图,输出最小生成树的生成过程算法思想:每个边的权值进行从小到大排序然后从小到大添加到最小生成树中,若添加一个边后构成环路,则此边不能添加。直到每个顶点都加入到最小生成树中。需要一个结构体来存储 每个边的权值与始末顶点。再进行排序。struct { VexType head; VexType tail; ArcType lowcost; }Edge[MAXSIZE]; //存入每条边的首尾以...

weixin_39958138的博客 186

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

最小生成树 Kruskal 算法

#include <iostream> #include <bitset> #include <algorithm> #include <vector> #include <map> #include <cstdio> #include <cstring> #include <cmath>...

weixin_43888067的博客 309

最小生成树(Kruskal算法)

  最小生成树(Kruskal和Prim算法) 关于图的几个概念定义: 连通图:在无向图中,若任意两个顶点vi与vj都有路径相通,则称该无向图为连通图。 强连通图:在有向图中,若任意两个顶点vi与vj都有路径相通,则称该有向图为强连通图。 连通网:在连通图中,若图的边具有一定的意义,每一条边都对应着一个数,称为权;权代表着连接连个顶点的代价,称这种连通图叫做连通网。 生成树:一个连通图...

小女不才 3万+

kruskal的最小生成树

给定一个无向图,它的生成树是能够连接图中所有定点的的子图。一个图可以有很多个生成树,但是一个无向,带全图的最小生成树是生成树的所有边的权值之和小于任何一个生成树的权值之和。      一棵最小生成树的边是多少呢,设定这个图一共有V条边,那么最小生成树应该有V-1条边。      应用kruskal来解决最小生成树的问题的步骤为: 1,将图中的所有的边按照权值的大小进行非降序排序。 2,保留

zzran的专栏 1488

图解最小生成树问题:Kruskal算法和Prim算法

本文全面介绍了两类经典算法,用于解决无向图中的最小生成树(MST)问题。文章解释了最小生成树的概念,并详细对比分析了Kruskal和Prim两种算法的原理、特点及应用场景。文章重点以图文并茂的方式,通过示例演示了算法的执行过程,包括详细的步骤解析和权值图示。Kruskal算法侧重边的逐步加入,适用于稀疏图;Prim算法侧重点的逐步扩张,适用于稠密图。两者均采用贪心策略,在网络设计、电路布线等领域有着广泛的应用。

m0_74496615的博客 2696

kruskal算法求最小生成树

描述 要求对一个图使用kruskal算法求最小生成树,依次输出选出的边所关联的顶点序列,要求下标较小者在前,如图所示,其顶点序列为1 3 4 6 2 5 3 6 2 3 输入 若干行整数 第一行为两个整数,分别为图的顶点数和边数 第二行开始是该图的邻接矩阵,主对角线统一用0表示,无直接路径的两点用100来表示(保证各边权值小于100) 输出 若干用空格隔开的整数 样例输入 6 10 0 6 1 ...

clzZ2的博客 5313
上一篇: HDU-1172 猜数字
下一篇: QUDOJ-78 重建二叉树 (中序后续推前序)
tbl00c
博客等级 码龄13年 21粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值