青少年编程知识记录 codecoming

最小生成树—Kruskal(克鲁斯卡尔)算法

一、算法描述

在一个连通加权无向图中,找到一棵最小生成树。即,找到连接所有顶点的、权值总和最小的树,且树中不包含任何环。



二、核心思想

  1. 贪心策略:每次从未选择的边中,选取一条权值最小的边。

  2. 避免环路:如果加入这条边会导致生成树中形成环,则舍弃它。

  3. 集合管理:使用并查集数据结构来高效地判断两个顶点是否已经连通(即加入边是否会形成环)。



三、图解过程

假设我们有以下连通图 G,目标是找到它的最小生成树(MST)。

步骤 0:初始化

  • 将图中所有边按权值从小到大排序

  • 初始化一个空的边集 MST,用于存放最小生成树的边。

  • 初始化并查集,让每个顶点自成一個集合。

排序后的边列表:(A,D):5, (C,E):5, (D,F):6, (A,B):7, (B,E):7, (B,C):8, (E,F):8, (B,D):9, ...

当前 MST: { }并查集状态: {A}, {B}, {C}, {D}, {E}, {F}

最小生成树—基本概念

一、最小生成树核心概念1. 基本定义一个带权无向连通图的最小生成树,是指从该图中选择若干条边,构成一个包含图中所有顶点的树结构(无环、连通),且所有选中边的权值之和最小。2. 关键性质生成树的本质:包含图中全部n个顶点,且仅有n-1条边(保证无环且连通,增减一条边都会破坏树的性质)。最小性:所有可能的生成树中,边权总和是最小的。不唯一性:当图中存在多条相同权值的边时,可能存在多个不同结构但权值和相同的最小生成树。适用范围:仅适用于无向连通图(非连通图只能求最小生成森林,即每个连通分量的最小生成树