普里姆算法是用来求加权连通图中的最小(代价)生成树的算法。
普里姆算法的基本思想是:从图中任意取出一个顶点,把它当成一棵树,然后从与这棵树相接的边中选取一条权值最小的边,并将这条边及其所连接的顶点一同并入这棵树中,重复以上操作,直到所有的顶点都被并入到这棵树中为止。
容易看到,这里有一个递归重复进行的过程,所以可以采用递归的思想来完成该算法。
首先,需要构造一个图结构,本文以如下图为图结构
图的顶点定义如下:
import java.util.ArrayList;
import java.util.List;
//表示图的顶点
public class GraphNode {
// 表示该顶点的数据
private String data;
// 表示该顶点的边集合
public List<GraphEdge> nodeList = null;
// 表示该顶点是否被访问过
private boolean isVisited;
// 构造方法
public GraphNode(String data) {
this.data = data;
isVisited = false;
if (nodeList == null) {
nodeList = new ArrayList<>();
}
}
public String getData() {
return data;
}
public List<GraphEdge> getEdgeList() {
return nodeList;
}
public void setVisited(boolean isVisited) {
this.isVisited = isVisited;