最小生成树(Prim、Kruskal算法)整理版

pascal,我整理的,希望能帮助大家,包括了原理+代码+优化代码

一、树及生成树的基本概念

树是无向图的特殊情况,即对于一个N个节点的无向图,其中只有N-1条边,且图中任意两点间有且仅有一条路径,即图中不存在环,这样的图称为树,一般记为T。树定义有以下几种表述:

(1)、T连通、无圈、有n个结点,连通有n-1条边;(2)、T无回路,但不相邻的两个结点间联以一边,恰得一个圈;(3)、T连通,但去掉任意一边,T就不连通了(即在点集合相同的图中,树是含边数最少的连通图);(4)、T的任意两个结点之间恰有一条初等链。

例如:已知有六个城市,它们之间要架设电话线,要求任

意两个城市均可以互相通话,并且电话线的总长度最短。若用

六个点v1…v6代表这六个城市,在任意两个城市之间架设电话

线,即在相应的两个点之间连一条边。这样,六个城市的一个

电话网就作成一个图。任意两个城市之间均可以通话,这个图

必须是连通图,且这个图必须是无圈的。否则,从圈上任意去

掉一条边,剩下的图仍然是六个城市的一个电话网。图5-6是

一个不含圈的连通图,代表了一个电话线网。

生成树(支撑树)

定义:如果图G’是一棵包含G的所有顶点的树,则称G’是G的一个支撑树或生成树。例如,图5-7b是图5-7a的一个支撑树。

定理:一个图G有生成树的条件是G是连通图。

证明:必要性显然;

充分性:设图G是连通的,若G不含圈,则按照定义,G是一个树,从而G是自身的一个生成树。若G含圈,则任取G的一个圈,从该圈中任意去掉一条边,得到图G的一生成子图G1。若G1不含圈,则G1是G的一个生成树。若G1仍然含圈,则任取G1的一个圈,再从圈中任意去掉一条边,得到图G的一生成子图G2。依此类推,可以得到图G的一个生成子图GK,且不含圈,从而GK是一个生成树。

寻找连通图生成树的方法:

破圈法:从图中任取一个圈,去掉一条边。再对剩下的图

重复以上步骤,直到不含圈时为止,这样就得到一个生成树。

取一个圈(v1,v2,v3,v1),在一个圈中去掉边e3。在剩下的图

中,再取一个圈(v1,v2,v4,v3,v1),去掉边e4。再从圈(v3,v4,v5,v3)

中去掉边e6。再从圈(v1,v2,v5,v4,v3,v1)中去掉边e7,

这样,剩下的图不含圈,于是得到一个支撑树,如图所示。

避圈法:也称为生长法,从图中某一点开始生长边,逐步扩展成长为一棵树,每步选取与已入树的边不构成圈的那些边。

最小生成树(Prim、Kruskal算法)整理版

最小生成树(Prim、Kruskal算法)整理版

最小生成树(Prim、Kruskal算法)整理版

你可能喜欢

  • 最小生成树算法实现
  • 算法合集
  • 数据结构课程设计最小生成树
  • 离散数学试题答案
  • 拓扑排序算法
  • 二叉树遍历
  • 普里姆算法最小生成树
  • 最短路径算法

最小生成树(Prim、Kruskal算法)整理版相关文档

最新文档

返回顶部