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

相关推荐
To_OC9 分钟前
LC 438 找到所有字母异位词:暴力超时后,我靠滑动窗口一招搞定
javascript·算法·leetcode
白狐_79819 分钟前
408数据结构第5章:二叉树遍历序列题——技巧、判断与真题型总结
数据结构
命运之光2 小时前
【C语言完整代码】就诊信息管理系统
java·c语言·开发语言
命运之光3 小时前
【C语言完整代码】图书管理系统:图书馆场景下的增删改查实战
c语言·开发语言
Forever Nore3 小时前
学完C语言力扣第一题做不来正常吗
数据结构·算法
hansang_IR3 小时前
【题解】LC:倍增 / 区间并查集(Range Parallel Unionfind)
c++·算法·并查集
东东最爱敲键盘3 小时前
day7.c++继承
c++
沫璃染墨4 小时前
《从零入门Linux系统篇(十五):系统工具篇·六——GDB调试器详解:从程序执行控制到高级调试技巧》
linux·运维·服务器·c语言·c++
吃着火锅x唱着歌4 小时前
Effective C++ 学习笔记 条款40 明智而审慎地使用多重继承
c++·笔记·学习