文章目录
Java-Prim最小生成树算法
Prim算法是一种用于寻找加权无向连通图的最小生成树的算法。该算法从图的任意一个顶点开始,每次选择与当前生成树距离最短的顶点加入生成树,直到所有顶点都加入生成树为止。
最小生成树的前提是该图是一个无环图和连通图
算法介绍
Prim算法的基本思想是分治策略,即将一个大的问题拆分成几个小问题来解决。在寻找最小生成树的过程中,Prim算法会维护两个集合:一个是已经加入生成树的顶点集合(设为U
),另一个是还未加入生成树的顶点集合(设为V-U
)。算法开始时,任选一个顶点加入U
,然后不断从V-U
中选择与U
中顶点相连且权重最小的边,将该边的另一个顶点加入U
,直到U
包含所有顶点为止。
代码
public class Graph {
/**
* 结点集合
*/
private List<String> node;
/**
* true 有向图
* false 无向图
*/
private boolean isDigraph;
/**
* 邻接矩阵
*/
private final int[][] matrix;
/**
* 最小生成树
* @param x 从编号为x的结点开始
* @return 最小生成树的邻接矩阵
*/
public int[][] primSpanningTree(int x) {
// 最小生成树矩阵
int[][] matrixT = new int[node.size()][node.size()];
// 集合 U
List<Integer> feasibleNodeList = new ArrayList<>(Collections