原理简单介绍:
1).输入:一个加权连通图,其中顶点集合为V,边集合为E;
2).初始化:Vertex数组,Vertex作为定点,包含其索引,父节点索引,其与已构建的最小生成树中存在的边中最小权值weight,根节点的权重初始为0; 将所有的Vertex加入到一个优先级队列
3).重复下列操作,直到优先级队列为空:
a.在优先级队列里取出最小权值的节点u,将u加入到最小生成树中,并记录u到一个数组res;
b.查找所有u相邻的节点v,如果v不在已生成的最小生成树中,并且u->v的权值比Vertex v的权值小,则更新v的权值
4).输出:res中存储的节点顺序,父节点信息,权值信息就可以完整表达最小生成树。
public class Prim {
private static class Vertex implements Comparable<Vertex>{
int index;
int parent;
int weight;
Vertex(int idx) {
index = idx;
parent = -1;
weight = Integer.MAX_VALUE;
}
@Override
public int compareTo(Vertex o) {
if (weight == o.weight) {
return 0;
} else if (weight > o.w