图是一种常见的高级数据结构,其中最小生成树也是图中的一个重要问题板块,我们先来说一下几个基本概念,懂的可以直接跳过:
1、连通图:没有方向且每两点之间都有一条线段直接连接。
2、强连通图:有方向且每两点之间都有两条线段双向连接。
3、生成树:每个顶点至少有一条线段与它连接且所有顶点同处一棵树中。
4、最小生成树:权值之和最小的生成树。
我们今天要解决的问题是如何构造一棵最小生成树,我们先看克洛斯卡尔kruskal算法。
克洛斯卡尔kruskal算法
我们先看流程图
如果您没有明白,请看下面的示意图
虚线代表已连接
此时权值最小的边是3,但他的两点已处于同一树,所以忽略。
打叉的边不满足条件,被忽略,最后得到的最小生成树如下图:
这课生成树权值为8,算法即结束。
普利姆prim算法
这个算法是基于点的,而克洛斯卡尔算法是基于线的,我们先看流程图
就如:
虚线表示已选或已读
蓝色代表当前选的线段
最后依然得到权值为8的生成树