最小生成树之Prim算法
来源:互联网 发布:李杰灵的淘宝店 编辑:程序博客网 时间:2024/05/29 19:54
如果连通图是一个带权图,则其生成树中的边也带权,生成树中所有边的权值之和称为生成树的代价。
1、最小生成树:带权连通图中代价最小的的生成树。
2、Prim算法:
算法思想:⑴ 若从顶点v0出发构造,U={v0},TE={};
⑵ 先找权值最小的边(u,v),其中u∈U且v∈V-U,并且子图不构成环,则U= U∪{v},TE=TE∪{(u,v)} ;
⑶ 重复⑵ ,直到U=V为止。则TE中必有n-1条边, T=(U,TE)就是最小生成树。
算法实现说明:
使用邻接矩阵表示图,设置一个一维数组用来保存V-U的点到U的点具有权值最小的边,定义如下:
struct { int adjvex ; /* 边所依附于U中的顶点 */int lowcost ; /* 该边的权值 */}closedge[MAX_EDGE] ;
所构造的最小生成树用一维数组存储其n-1条边,每条边的存储结构如下:
typedef struct MSTEdge{ int vex1, vex2 ; /* 边所依附的图中两个顶点 */WeightType weight ; /* 边的权值 */}MSTEdge ;
实现:算法中只是二重循环,故时间复杂度是n^2
#define INFINITY MAX_VAL /* 最大值 */ MSTEdge *Prim_MST(AdjGraph *G , int u) /* 从第u个顶点开始构造图G的最小生成树 */{MSTEdge TE[] ; // 存放最小生成树n-1条边的数组指针int j , k , v , min ;for (j=0; j<G->vexnum; j++){ closedge[j].adjvex=u ; closedge[j].lowcost=G->adj[j][u] ;} /* 初始化数组closedge[n] */ closedge[u].lowcost=0 ; /* 初始时置U={u} */ TE=(MSTEdge *)malloc((G->vexnum-1)*sizeof(MSTEdge)) ;for (j=0; j<G->vexnum-1; j++){min= INFINITY ;for (v=0; v<G->vexnum; v++) if (closedge[v].lowcost!=0&& closedge[v].lowcost<min){ min=closedge[v].lowcost ; k=v ; }TE[j].vex1=closedge[k].adjvex ; TE[j].vex2=k ;TE[j].weight=closedge[k].lowcost ;closedge[k].lowcost=0 ; /* 将顶点k并入U中 */for (v=0; v<G->vexnum; v++) if (G->adj[v][k]<closedge[v]. lowcost) { closedge[v].lowcost= G->adj[v][k] ; closedge[v].adjvex=k ; } /* 修改数组closedge[n]的各个元素的值 */}return(TE) ;} /* 求最小生成树的Prime算法 */
读者可自行编写测试代码,或者用前边我们实现过的邻接矩阵图结构来测试。
阅读全文
0 0
- 最小生成树算法之Prim算法
- 最小生成树算法之Prim算法
- 最小生成树算法之prim算法
- 最小生成树之Prim算法
- 最小生成树算法之prim
- 最小生成树之prim算法
- 【算法】最小生成树之prim
- 最小生成树之prim算法
- 最小生成树算法之Prim
- 最小生成树之prim算法
- 最小生成树之prim算法
- 最小生成树之prim算法
- 最小生成树之prim算法
- 最小生成树之prim算法
- 最小生成树之prim算法
- 最小生成树之Prim算法
- 最小生成树之prim算法
- 最小生成树之Prim算法
- 程序中断方式的接口电路以及处理过程
- java高级特性:集合框架
- Vold工作机制
- 算法开始篇
- codeforce_894B_数学脑洞题
- 最小生成树之Prim算法
- Python基础--range()和np.arrange()的区别与联系
- 前端js框架
- cxf拦截器,实现对接收到的报文和发送出去的报文格式自定义
- Vold工作机制分析
- vue之防止页面加载时看到花括号解决方案
- odoo10创建calendarView(日历视图)
- python练习6 自动修正juzi
- shell脚本一键部署环境