当前位置:首页 > C++知识 > 正文内容

最小生成树(1)

亿万年的星光1年前 (2024-08-31)C++知识1563

一、定义

一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法求出。


二、概述

在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即),而 w(u, v) 代表此的权重,若存在 T 为 E 的子集且为无循环图,使得联通所有结点的的 w(T) 最小,则此 T 为 G 的最小生成树

最小生成树其实是最小权重生成树的简称。

三、生成树


要求最小生成树,先来理解什么是生成树。

生成树的定义:一个连通图的生成树是一个极小的连通子图,它包含图中全部的n个顶点,但只有构成一棵树的n-1条边。

可以看到一个包含3个顶点的完全图可以产生3颗生成树。那么对于包含n个顶点的无向完全图最多包含n^n-2 个生成树。


生成树的特点:


  • 一个连通图可以有多个生成树;

  • 一个连通图的所有生成树都包含相同的顶点个数和边数;

  • 生成树当中不存在环;

  • 移除生成树中的任意一条边都会导致图的不连通, 生成树的边最少特性;

  • 在生成树中添加一条边会构成环。

  • 对于包含n个顶点的连通图,生成树包含n个顶点和n-1条边


四、最小生成树

所谓一个 带权图 的最小生成树,就是原图中边的权值最小的生成树 ,所谓最小是指边的权值之和小于或者等于其它生成树的边的权值之和。

比如上面这个,因为n个顶点的联通图,所以生成树包含n个顶点和n-1条边。

所以,很明显选3条边连起来肯定是1、2、3这个三个权重最小,那么1、2、3一共有两种选法,所以最小生成树有两个。













扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:

相关文章

符号与快捷键

符号与快捷键

一、键盘二、符号与快捷键1.常见符号加号:shift 加 =减号:-乘号:shift 加 8  (*)除号:/取余(模):shift 加 5    (%)【示例】#inc...

01背包问题

问题定义01背包问题是一个经典的组合优化问题,通常描述如下:有个容量为C的背包有n件物品,第i件物品的重量为Wi,价值为Vi每种物品只有一件,可以选择放入背包(1)或不放入背包(0),因此称为“01”...

【高级篇】C++中的sort函数详解

【高级篇】C++中的sort函数详解

0.简介sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高,sort函数包含在头文件为#...

STL入门——容器1:vector (不定长度数组)

一、定义     vector是一个不定长度数组。不仅如此,它把一些常用操作“封装”在了 vector 类型内部。    ...

【题解】小X玩游戏

【题目描述】小X喜欢玩游戏。  这天,小X觉得传统的游戏都玩腻了,自己随手在草稿纸上画了一行N个格子作为棋盘, 制定了如下规则:格子从左到右依次编号为1到N,玩家初始位于格子1,初...

【数据结构】并查集2

【数据结构】并查集2

上一篇文章,简单介绍了并查集。这篇文章,介绍一下并查集的改进以及优化。find函数的优化(路径压缩)因为并查集的merge操作:void merge(int a, int...