算法系列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

相关推荐
王维同学1 小时前
[自学][Windows C++]RunOnceEx 注册表分组键的安全遍历
c++·windows·安全·开源
战族狼魂2 小时前
高频面试题精选:分治与AI Agent架构
人工智能·算法·大模型·大语言模型
李剑一2 小时前
你用过网易的将军令嘛?它底层实现账号保护的原理相当简单粗暴
算法
Scott9999HH2 小时前
告别流量波动玄学!从法拉第电磁定律到底层 C/C++ 流量累积算法,深度解密工业级电磁流量计选型与开发
c语言·c++·算法
脱胎换骨-军哥2 小时前
C++/Rust无缝互操作:混合系统新常态
开发语言·c++·rust
ChaoZiLL3 小时前
我的数据结构4-栈和队列
数据结构
天空'之城3 小时前
C 语言工业级通用组件手写 06:固定块内存池
c语言·嵌入式开发·内存池·底层优化
香辣牛肉饭3 小时前
【算法】动态规划 最长公共子序列(LCS)
经验分享·笔记·算法·动态规划
miller-tsunami3 小时前
顺序表相关知识点
数据结构·顺序表