# Prim算法求最小生成树 ## 简介 **最小生成树**: 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边 (**边的代价和最小**) **Prim算法**是求最小生成树的一种方法,由于Prim算法的复杂度与边的数量无关,于是较适用于求稠密网的最小生成树。 Prim算法的`基本思想`是: 1、初始化:U={v0}; TE={}; 2、重复下述操作直到U=V: * 2.1 在E中寻找最短边(u,v),且满足u∈U,v∈V; * 2.2 U=U+{v}; * 2.3 TE=TE+{ (u,v) }; ## 求最小生成树的步骤 无向图如下图所示  Prim算法求最小生成树的步骤:  ## 代码实现 此处我采用邻接矩阵储存该无向图,为了省时间(其实是自己懒 ),此处省略邻接矩阵的构造过程,采用手动写入边集和点集构建该无向图。 `Prim算法代码实现`: ```java /** * Prim算法 * @param G 无向图 * @param shortEdge 辅助边集 */ public static void Prim(MGraph G, ShortEdge[] shortEdge){ //初始化辅助数组 for (int i = 0;i0) continue; //更新辅助数组,选取最新的邻接边更新至辅助数组 if ((G.arc[k][j]0) continue; //更新辅助数组,选取最新的邻接边更新至辅助数组 if ((G.arc[k][j] shortEdges[i].lowcast && shortEdges[i].lowcast!=0){ min = shortEdges[i].lowcast; result = shortEdges[i].adjvex; } } return result; } } ``` 运行结果:  ## 参考文献 * 王红梅,胡明,王涛编著. 数据结构(C++版)(第二版)[M]. 清华大学出版社. 最后修改:2020 年 03 月 22 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏