四大图算法完整对比讲解 总分类最小生成树 MSTPrim普利姆、Kruskal克鲁斯卡尔 作用无向连通带权图选出包含全部顶点、总权值最小的无环子图单源最短路径Dijkstra迪杰斯特拉 作用给定一个起点求该点到其余所有顶点最短路径仅支持非负权边多源全点对最短路径Floyd弗洛伊德 作用一次性求出任意两点之间最短路径支持负权边不能处理负权环一、Prim 普利姆算法最小生成树・加点法1. 核心思想贪心「加点」把顶点分为两个集合集合 S已选入最小生成树的顶点集合 V-S剩余未选顶点 初始任选一个顶点放入 S 循环每次从连接 S 与 V-S 的所有边中选权值最小的一条边把另一端顶点加入 S 直到 S 包含全部顶点结束。2. 适用场景稠密图顶点少、边多邻接矩阵存储最优无向连通带权图边权可正可负无负环要求3. 标准实现邻接矩阵408 手写模板核心数组dist[]dist[i] 顶点 i 到集合 S 的最小边权初始化起点入 S其余dist[i] 起点到i的边权无边设为∞循环 n-1 次总共选 n 个点已选 1 个 ① 在 V-S 中找到dist最小的顶点 u加入 S ② 用 u 更新所有不在 S 的顶点 vdist[v] min(dist[v], weight[u][v])4. 复杂度邻接矩阵实现\(O(n^2)\)n 为顶点数稠密图优势极大堆优化邻接表\(O(E\log n)\)稀疏图可用5. 优缺点✅ 稠密图效率极高无需预处理所有边 ❌ 稀疏图不如 Kruskal只能从顶点角度构建 MST6. 408 考点手工模拟表格计算 dist 数组与 Kruskal 对比选择场景无法处理不连通图必须连通图才有 MST二、Kruskal 克鲁斯卡尔算法最小生成树・加边法1. 核心思想贪心「加边」 并查集判环将图中所有边按权值从小到大排序依次遍历每条边(u,v,w)若 u、v 不在同一个连通分量并查集 find 根不同选中这条边合并两个集合加入 MST若 u、v 已连通舍弃否则形成环直到选出n-1条边MST 构造完成2. 适用场景稀疏图边数 E 远小于\(n^2\)邻接表存储边少、顶点多的图3. 核心工具并查集Union-Find两个操作find(x)查找顶点 x 所在集合根路径压缩优化union(x,y)合并两个顶点集合按秩合并优化4. 复杂度排序边\(O(E\log E)\)并查集操作近似\(O(1)\) 总复杂度\(O(E\log E)\)E 为边数5. 优缺点✅ 稀疏图极快代码简洁只需要边集合 ❌ 稠密图边数量巨大排序耗时不如 Prim6. 408 考点并查集手写实现手工模拟选边、判环过程森林生成不连通图会生成多棵最小生成森林Prim vs Kruskal 对比表格维度PrimKruskal贪心对象顶点加点边加边存储结构邻接矩阵稠密边集数组稀疏复杂度\(O(n^2)\)\(O(E\log E)\)最优场景稠密图稀疏图判环方式天然无环只连 S 内外并查集三、Dijkstra 迪杰斯特拉单源最短路径1. 核心思想贪心锁定最短顶点顶点划分S已确定源点最短路径的顶点V-S临时顶点 初始源点入 Sdist[]存源点到各点直接距离 循环每次选出 V-S 中 dist 最小顶点 u 加入 S 用 u 松弛更新所有邻接顶点 vdist[v] min(dist[v], dist[u]w(u,v))2. 硬性限制必考简答所有边权必须 ≥ 0不能存在负权边原因贪心一旦把顶点加入 S就认定最短路径固定负权边会导致后续出现更短路径无法回退更新结果错误。 负权单源替代算法Bellman-Ford / SPFA3. 实现方式朴素邻接矩阵\(O(n^2)\)适合稠密图小根堆优化优先队列\(O(E\log n)\)稀疏图标准写法4. 复杂度朴素版\(O(n^2)\)堆优化版\(O(E\log n)\)5. 408 高频坑点不能处理负权只算单源一次只能一个起点松弛操作公式记忆与 Floyd 区分使用场景。四、Floyd 弗洛伊德多源全点对最短路径1. 核心思想动态规划中间点中转松弛DP 状态定义dp[k][i][j]顶点 i 到 j只允许经过 0~k 号顶点中转的最短路径 空间优化二维数组dist[i][j]原地覆盖更新核心松弛公式万能公式plaintextdist[i][j] min( dist[i][j], dist[i][k] dist[k][j] )三层循环顺序中转点 k 最外层i、j 内层k0~n-1 枚举所有中间中转顶点i起点j终点2. 适用范围一次性求出任意两点间最短路径多源支持负权边但不能存在负权回路回路无限绕距离无限小顶点数量少n≤100顶点多则时间爆炸3. 初始化规则dist[i][i] 0自己到自己距离 0有直接边i→jdist[i][j] 边权无边dist[i][j] ∞4. 复杂度三层循环固定\(O(n^3)\)只适合小规模图5. 408 拓展考点判断负权环存在dist[i][i] 0说明 i 在负环内传递闭包改造把 min 换成或运算求可达性五、四大算法核心总对比表表格算法用途图类型要求能否负权核心思路最优场景时间复杂度Prim最小生成树 MST无向连通带权图允许负权贪心加点dist 数组稠密图\(O(n^2)\)Kruskal最小生成树 MST无向带权图可不连通允许负权贪心加边 并查集判环稀疏图\(O(E\log E)\)Dijkstra单源最短路径有向 / 无向图禁止负权边贪心锁定最短顶点单起点、无负权朴素\(O(n^2)\) / 堆\(O(E\log n)\)Floyd全点对最短路径有向 / 无向图允许负权禁负环动态规划中转松弛顶点少、求全部两点路径\(O(n^3)\)六、408 做题选择口诀求最小生成树 顶点少稠密图 → Prim边少稀疏图 → Kruskal只给一个起点求最短路径、无负权 → Dijkstra需要所有点互相之间最短路径、顶点数量少 → Floyd图存在负权边、单源最短路径 → 不能用 Dijkstra改用 Bellman-Ford

相关新闻

最新新闻

Replit免费模式实战:用Flask和SQLite构建并部署待办接口

Replit免费模式实战:用Flask和SQLite构建并部署待办接口

Replit 是一个在线集成开发环境,也是一个应用部署平台。很多人第一次接触它,是因为不想在本地折腾 Python 或 Node.js 环境;用过一段时间后会发现,它的免费模式不是只能跑 Hello World,也能承载完整的 Web 应用原型、自…

2026/8/29 15:31:55
STM32WL5x实战:双核架构、LoRaWAN与低功耗设计要点

STM32WL5x实战:双核架构、LoRaWAN与低功耗设计要点

ST官方把STM32WL5x定位为“具有sub-GHz无线电解决方案”的单芯片MCU,但说句实话,这八个字完全不足以概括它对物联网感知层项目的真正价值。我用了大半年时间,从参考手册啃到实际布板、调天线、测功耗、跑LoRaWAN入网,这芯片给我的…

2026/8/29 15:31:55
Taste-Skill 终极指南:AI 前端设计技能如何让生成的界面摆脱模板味

Taste-Skill 终极指南:AI 前端设计技能如何让生成的界面摆脱模板味

Taste-Skill 终极指南:AI 前端设计技能如何让生成的界面摆脱模板味 【免费下载链接】taste-skill Taste-Skill - gives your AI good taste. stops the AI from generating boring, generic slop 项目地址: https://gitcode.com/GitHub_Trending/ta/taste-skill …

2026/8/29 15:31:55
无视觉AI对话助手实战:用大语言模型教用户佩戴美瞳

无视觉AI对话助手实战:用大语言模型教用户佩戴美瞳

如果你没戴过美瞳,永远不知道“把一片透明塑料贴到眼球上”这件事能有多难。手一抖,镜片掉地上;好不容易放上去,眼睛一眨又掉出来;甚至有些新手在镜子前折腾半小时,最后以“感觉镜片在眼皮里”告终。更麻烦…

2026/8/29 15:31:55
STM32F746上基于CubeMX和TouchGFX的GUI移植实战指南

STM32F746上基于CubeMX和TouchGFX的GUI移植实战指南

我先把Final坑踩完再放出正文。直接给结果。 1. 为什么用CubeMX搭TouchGFX:这套组合解决什么问题 STM32F746Discovery这块板子,很多人买回来第一件事就是点个灯、跑个RTOS,然后就吃灰了。其实这块板子最值钱的地方在于板上集成了4.3寸480x2…

2026/8/29 15:31:55
文献综述引用太少、结构混乱怎么办:分类整理与Word导出方法

文献综述引用太少、结构混乱怎么办:分类整理与Word导出方法

文献综述引用太少、结构混乱怎么办:分类整理与Word导出方法在向导师提交心理学与认知神经科学方向的开题报告或学位论文初稿时,不少同学都会收到类似的严肃批注:“文献综述引用太少、结构混乱,缺乏清晰的实验范式分类与认知神经机…

2026/8/29 15:26:55