最小生成树——Kruskal与Prim算法
最小生成树——Kruskal与Prim算法
序:
首先:
啥是最小生成树???
咳咳。。。
如图:

在一个有n个点的无向连通图中,选取n-1条边使得这个图变成一棵树。这就叫“生成树”。(如下图)

每个无向连通图都会拥有至少一个生成树。
而在无向连通图中,我们让每一个边都拥有一个边权(就是每个边代表一个值)。

而我们在有边权的无向连通图中构造一个生成树,使得这个生成树所用的边的边权之和最小。这个生成树就叫这个无向连通图的最小生成树!

上图这个最小生成树的边权之和为9,是所有生成树中边权之和最小的。
Kruskal算法
(Kruskal算法适合稀疏图)
仍旧是那个无向连通图。。。

在这个图中有9个边。将这9条边按边权大小从小到大排序。紧接着将排好序的边挨个加入生成树中。没加入一条边便判断一下生成树是否有环。如果有,则将这条边移出生成树,换下一条边重新操作。
看不懂的看下面的示例:
首先选择边权最小的边加入生成树。(多个相等的边权则任意选择一个)

重复之前的操作。



此时我再选择一条边加入生成树。

大家注意下图下面红色部分!!!
在加入一条边后生成树已经出现了一个环!!!

所以我们要退回之前。

此时选择另外一条边。

此时并没有出现任何环。所以进行下一步。
我们发现这时的最小生成树刚好有n-1条边(一共n个点)。此时我们的最小生成树已经找完了。
Prim算法
(Prim算法适合稠密图)
那个无向连通图又来了。。。
(因为某些不可描述的原因,作者把图改了一下。。。)

在此图中随便选择一个点加入生成树,然后选取所有可以取到的边(就是和生成树中的点连接的边)中边权最小的边加入生成树中,判断是否有环,然后重复此步骤。
看不懂的继续看例子啊
首先任意选取一个点。(例子选的是v1)

然后选取一个边权最小的边,并把点加入生成树。

紧接着重复此步骤。




此时已经构成一棵最小生成树了。(PS:作者提示——作者没有做出现环的样例,请各位读者注意)
结束语:
本人第一篇博客。
有问题请指出,谢谢!
最小生成树——Kruskal与Prim算法的更多相关文章
- 关于最小生成树 Kruskal 和 Prim 的简述(图论)
模版题为[poj 1287]Networking. 题意我就不说了,我就想简单讲一下Kruskal和Prim算法.卡Kruskal的题似乎几乎为0.(●-`o´-)ノ 假设有一个N个点的连通图,有M条 ...
- Kruskal和Prim算法求最小生成树
Kruskal算法求最小生成树 测试数据: 5 6 0 1 5 0 2 3 1 2 4 2 4 2 2 3 1 1 4 1 输出: 2 3 1 1 4 1 2 4 2 0 2 3 思路:在保证不产生回 ...
- 最小生成树(Kruskal和Prim算法)
关于图的几个概念定义: 关于图的几个概念定义: 连通图:在无向图中,若任意两个顶点vi与vj都有路径相通,则称该无向图为连通图. 强连通图:在有向图中,若任意两个顶点vi与vj都有路 ...
- 最小生成树的kruskal、prim算法
kruskal算法和prim算法 都说 kruskal是加边法,prim是加点法 这篇解释也不错:这篇 1.kruskal算法 因为是加边法,所以这个方法比较合适稀疏图.要码这个需要先懂并查集.因为我 ...
- 1.1.2最小生成树(Kruskal和Prim算法)
部分内容摘自 勿在浮沙筑高台 http://blog.csdn.net/luoshixian099/article/details/51908175 关于图的几个概念定义: 连通图:在无向图中,若任意 ...
- 算法导论--最小生成树(Kruskal和Prim算法)
转载出处:勿在浮沙筑高台http://blog.csdn.net/luoshixian099/article/details/51908175 关于图的几个概念定义: 连通图:在无向图中,若任意两个顶 ...
- 数据结构与算法--最小生成树之Prim算法
数据结构与算法--最小生成树之Prim算法 加权图是一种为每条边关联一个权值或称为成本的图模型.所谓生成树,是某图的一棵含有全部n个顶点的无环连通子图,它有n - 1条边.最小生成树(MST)是加权图 ...
- [讲解]prim算法<最小生成树>
最小生成树的方法一般比较常用的就是kruskal和prim算法 一个是按边从小到大加,一个是按点从小到大加,两个方法都是比较常用的,都不是很难... kruskal算法在本文里我就不讲了,本文的重点是 ...
- hiho 1097 最小生成树一·Prim算法 (最小生成树)
题目: 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可以拥有不止一个城市了! 但是,问 ...
随机推荐
- CSPS_103
被sdfz踩爆了! %%%kai586123 %%%Gekoo %%%sdfz_yrt T1 我以为是水题!一直在肝! 而且为什么每次我的考场暴力都是考后才调出来啊!! 先记录一下正解的大神做法: 按 ...
- 『题解』UVa11324 The Largest Clique
原文地址 Problem Portal Portal1:UVa Portal2:Luogu Portal3:Vjudge Description Given a directed graph \(\t ...
- css3 svg路径蒙版动画
css3 svg路径蒙版动画 具体看https://www.cnblogs.com/oubenruing/p/9568954.html 还有个更好控制的写法<pre><!DOCTYP ...
- python基础-匿名函数和内置函数
匿名函数和内置函数 匿名函数:没有名字,使用一次即被收回,加括号就可以运行的函数. 语法:lambda 参数:返回值 使用方式: 将匿名函数赋值给变量,给匿名函数一个名字,使用这个变量来调用(还不如用 ...
- PHP程序员-常用工具
三连问 经常有社区的同学问: “我的PHP程序有没有阻塞,我的PHP程序有没有开启协程(对自己写好的代码表示不自信),我的PHP程序有没有问题”.然后贴出了自己的程序,然后进入了愉快的灌水环节,随着时 ...
- 用大写字母输入 Linux 命令,实现以 sudo 用户权限运行
我们知道,一些 Linux 命令是要通过 sudo 权限才能运行的,这需要我们每次使用这些命令时在前面加一个 sudo ,十分繁琐.今天给大家介绍一个好用的工具 SUDO ,它只需要我们用大写字母键入 ...
- EFCore批量操作,你真的清楚吗
背景 EntityFramework Core有许多新的特性,其中一个重要特性便是批量操作. 批量操作意味着不需要为每次Insert/Update/Delete操作发送单独的命令,而是在一次SQL请求 ...
- 高质量App的架构设计与思考!
最近在做一功能不大.业务也不复杂的小众App,以往做App是发现自己从来没有考虑过一些架构方面的问题,只是按照自己以往的习惯去写代码,忽略了App的设计.本次分享主要包含一些开发App的小经验和技巧, ...
- 力扣(LeetCode)删除排序链表中的重复元素 个人题解
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 这题思路比较简单,同样是快慢针的思路. 用一个整数类型val对应最新的只出现过一次的那个值, 如果节点的下一个节点的值和这个对应则不做别 ...
- 防火墙和SELinux
在/etc/sysconfig/selinux中修改SELINUX=disabled关闭SELinux 执行systemctl disable firewalld关闭防火墙 然后重启计算机