一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的全部 n 个结点,而且有保持图连通的最少的边。最小生成树能够用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法求出。算法
在一给定的无向图G = (V, E) 中,(u, v) 表明链接顶点 u 与顶点 v 的边(即),而 w(u, v) 表明此边的权重,若存在 T 为 E 的子集(即)且为无循环图,使得ide
的 w(T) 最小,则此 T 为 G 的最小生成树。视频
最小生成树实际上是最小权重生成树的简称。对象
例如:要在n个城市之间铺设光缆,主要目标是要使这 n 个城市的任意两个之间均可以通讯,但铺设光缆的费用很高,且各个城市之间铺设光缆的费用不一样,所以另外一个目标是要使铺设光缆的总费用最低。这就须要找到带权的最小生成树。blog
咱们首先看咱们的无向图 , 须要找到一个最小权重生成树排序
其基本思想就是把每条边都拿出来, 而后按照权重排序, 将这些边组合起来, 要求的是组合过程当中不能够造成环, 造成环则放弃这条边get
基本实现就是这个了, 打错的是不符合要求的. 到最后就会造成最小权重生成树it
其基本思想就比较麻烦, 咱们先看一张图class
这里有四行数据,循环
第一行各个节点.
第二行是节点是否被选中
第三行是节点与父亲节点之间的距离(权重) , 好比 a-b ,若是a被选了,那么 b的父亲就是a,就是这个意思,ab之间的权重就是这个值, 并且b不必定只有一个父亲
第四行就是父亲节点是谁了
因此开始吧
咱们首先以0位起始位置 , 0标记为true, 开始往前推动, 0和1,7连着. 0-7=8,0-1=4 , 因此这一次选0-1 , 此时 标记1为true ,
01节点连着的有 0-7=8,1-7=11,1-2=8 ,此时0-7与1-2相同, 此时选择父节点小的为选择对象 , 此时将7标记为true.
071 节点连着 1-2=8 , 7-6=1 , 7-8=7 , 因此选择 7-6 ,标记6为true , 就一直标记到所有为true为止.
这个思路就是我上述讲的.
若是你仍是不理解能够看看这个视频 , 连接 : https://www.bilibili.com/video/av47042691?from=search&seid=15424121794388295524