算法系列1之最小生成树

一.最小生成树

核心目标:

"连通所有顶点,总权值最小",连通无向网的核心问题)

先明确3个前提定义

生成树:对于连通无向图,包含图中所有

n个顶点和n-1条边的无环连通子图

删一条边则不连通,加一条边则成环

最小生成树:顾名思义是1:n关系

最小生成树(MST):在连通无向带权图(网)中,所有生成树中边的权值之和最小的生成树,称为最小生成树。

​ 核心需求:

用最少的"成本"(总权值),连接所有的"节点"(顶点),适用于"连通问题"(如修路、架线、网络布线)

属性

二.Kruskal算法(找边)

1.引申

由此算法引出最后一个图的存储结构 :

边集数组:

存储了边的两个端点及权值(多个顶点对组成的数组)

这里由邻接矩阵转换成边集数组形式

2.核心思想

贪心算法,查找局部边,并查集思想,符合条件的弄成同一父节点

3.步骤

首先把顶点的索引和边的权值存储在边集数组中

在将边集数组进行排序

三.Prim算法(找顶点)

1.核心思想

贪心思想,查找局部顶点

2.步骤

定义三大数组(各顶点边的权值数组,待激活节点数组,已访问数组),动态维护节点信息

以一个顶点为头,将关联顶点的边进行相关的操作

其次激活全部节点 : 利用假设法,找到最符合条件的边的关联顶点,在以该顶点进行操作

(找关联的各个顶点,找各个顶点里最符合条件的那个,激活本身节点)

四.代码

1.Kruskal代码

1.1要点

1.2代码

.h

.c

main.c

2.Prim代码

2.1要点

2.2代码

.h

.c

main.c

相关推荐
写代码写到手抽筋5 小时前
5G上行DCI字段判定:端口 流数 PMI选择详解
java·算法·5g
xieliyu.5 小时前
Java算法精讲:双指针(二)
java·开发语言·算法
苏宸啊5 小时前
IPC管道
linux·c++
BestOrNothing_20156 小时前
ROS2 话题通信实战:消息对象、Publisher 发布器与 Subscriber 订阅器保姆级教程
c++·ros2·subscriber·publisher·话题通信
wayz116 小时前
Momentum:PSL(心理线指标)技术指标详解
算法·金融·数据分析·量化交易·特征工程
8Qi87 小时前
LeetCode 213:打家劫舍 II(House Robber II)—— 题解 ✅
算法·leetcode·职场和发展·动态规划
三品吉他手会点灯7 小时前
C语言学习笔记 - 44.运算符和表达式 - 运算符2 - 除法与取余运算符
c语言·开发语言·笔记·算法
kkeeper~7 小时前
0基础C语言积跬步之动态内存管理
c语言·开发语言
乐迪信息7 小时前
乐迪信息:AI算法盒子实时识别船舶烟雾与火焰异常
大数据·人工智能·算法·安全·目标跟踪
J-Tony117 小时前
【JVM】根可达算法
jvm·算法