今天,我们来聊一聊最小生成树。最小生成树可用来计算成本最小化问题,非常实用。与最小生成树相关的数据结构是加权图。
1.加权图和最小生成树
1.1.加权图定义
加权图是一种为每条边关联一个权值的图模型,权值可代表举例或成本。
1.2.最小生成树定义
图的生成树是一颗含有所有顶点的五环连通子图,一幅加权图的最小生成树(minimum spanning tree,MST)是它的一棵权值最小的生成树。
如下所示是一幅加权无向图和它的最小生成树。
![d48b855c744953911f553da343c0145f.png](https://img-blog.csdnimg.cn/img_convert/d48b855c744953911f553da343c0145f.png)
1.3.加权无向图数据类型
加权边的API
![62954ab1436b484f81327594dcf5e70a.png](https://img-blog.csdnimg.cn/img_convert/62954ab1436b484f81327594dcf5e70a.png)
加权无向图API
![1a328ac33077ba39e7c091e5e62803d9.png](https://img-blog.csdnimg.cn/img_convert/1a328ac33077ba39e7c091e5e62803d9.png)
加权无向图表示
![56c71b483fa727a4dddee46737f49e0e.png](https://img-blog.csdnimg.cn/img_convert/56c71b483fa727a4dddee46737f49e0e.png)
实现
权重边实现
public class Edge implements Comparable<Edge> {
private final int v;
private final int w;
private final double weight;
public Edge(int v, int w, double weight) {
this.v = v;
this.w = w;
this.weight = weight;
}
pu