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

相关推荐
扶风ff3 分钟前
练题簿在线免费刷题:会员线下组卷、Word 试卷与成绩导入,课堂检测更方便
java·开发语言·算法·小程序·word
程序员老陆7 分钟前
C++ 多线程通信方式全景:从共享内存到结构化协调
开发语言·c++
yi01111 分钟前
LeetCode 15:三数之和|排序 + 双指针,如何避免重复答案?
笔记·python·算法·leetcode·双指针
Zwawa17 分钟前
把 AO 接回来:黑线和白底之间到底差了多少
c语言·单片机·嵌入式
-dzk-26 分钟前
【多维动态规划】LC 1143.最长公共子序列
算法·动态规划
某不知名網友30 分钟前
ROS2 核心通信:话题发布与订阅详解
开发语言·c++
C++ 老炮儿的技术栈31 分钟前
char (*csConnectName)[256]; 和 char csConnectName [256] 有什么区别
java·c语言·开发语言·c++·人工智能·算法·c
Omics Pro41 分钟前
全新可重分析!代谢组质谱专用
数据库·人工智能·算法·机器学习·自然语言处理
Nebula_g42 分钟前
JavaSE加强:线程Thread(线程安全重点)
java·开发语言·jvm·算法·javase·技术栈
一只废狗狗狗狗狗狗狗狗狗43 分钟前
Network架构1——卷积神经网络CNN
人工智能·算法·cnn