最小生成树()

生成树的概念算法

        

        在一个任意连通图G中,若是取它的所有顶点和一部分边构成一个子图G',即:V(G')=V(G)和E(G')⊆E(G)ide

        若同时知足边集E(G')中的全部边既可以使所有顶点连通而又不造成任何回路,则称子图G'是原图G的一棵生成树。blog

        下面简单说明一下,在既可以连通图G中的所有n个顶点又没有造成回路的子图G'(即生成树)中,一定包含n-1条边。要构造子图G',首先从图G中任取一个顶点加入G'中,此时G'中只有一个顶点,假定具备一个顶点的图是连通的,之后每向G'中加入一个顶点,都要加入以该顶点为一个端点(终点),以已连通的顶点之中的任一个顶点为开始顶点的一条边,这样既连通了该顶点又不会产生回路,进行n-1次后,就向G'中加入了n-1个顶点和n-1条边,使得G'中的n个顶点既连通又不产生回路。it

       在图G的一棵生成树G'中,若再增长一条边,就会出现一条回路。这是由于此边的两个端点已连通,再加入此边后,这两个端点间有两条路径,所以就造成了一条回路,子图G'也就再也不是生成树了。一样,若从生成树G'中删去一条边,就使得G'变为非连通图。这是由于此边的两个端点是靠此边惟一连通的,删除此边后,一定使这两个端点分属于两个连通份量中,使G'变成了具备两个两通份量的非连通图。class

        同一个连通图能够有不一样的生成树。例如对于图9-1(a),其他3个子图都是它的生成树。在每棵生成树中都包含8个顶点和7条边,即n个顶点和n-1条边,此时n等于原图中的顶点数8,它们的差异只是边的选取方法不一样。搜索

       在这3棵生成树中,图9-1(b)中的边集是从图9-1(a)中的顶点V0出发,利用深度优先搜索遍历的方法而获得的边集,此图是原图的深度优先生成树;图9-1(c)中的边集是从图9-1(a)中的顶点V0出发,利用广度优先搜索遍历的方法而获得的边集,此图是原图的广度优先生成树;图9-1(d)是原图的任意一棵生成树。固然图9-1(a)的生成树远不止这3种,只要能连通全部顶点而又不产生回路的任何子图都是它的生成树。遍历

       

       对于一个连通网(即连通带权图,假定每条边上的权值均为正实数)来讲,生成树不一样,每棵树的权(即树中全部边上的权值总和)也可能不一样。图9-2(a)就是一个连通网,图9-2(b)、(c)和(d)是它的3棵生成树,每棵树的权各不相同。它们分别为5七、53和38.具备权值最小的生成树被称为图的最小生成树。经过后面将要介绍的构造最小生成树的方法可知,图9-2(d)是图9-2(a)的最小生成树。方法

 


 

最小生成树是在一个给定的无向图G(V,E)中求一棵树Tim

使得这棵树拥有图G中的全部顶点img

且全部边都是来自图G中的边

而且知足整棵树的边权之和最小

【性质】

① 最小生成树是树,所以其边数等于顶点数减1,且树中必定不会有环

②对给定的图G但其(V,E),其最小生成树能够不惟一,但其边权之和必定是惟一的

③因为最小生成树是在无向图上生成的,所以其根结点能够是这棵树上的任何一个结点

通常求解最小生成树有两种算法

即prim算法和kruskal算法