最小生成树:普里姆算法.c++
来源:互联网 发布:淘宝双11打折 编辑:程序博客网 时间:2024/06/05 06:57
普里姆算法
简易步骤:
辅助数组closedge记录从U到V-U具有最小权值的边,其中lowcost储存最小边上的权值,adjvex储存最小边在U中的那个顶点
数组的定义:
struct{ VerTexType adjvex; ArcType lowcost; }closedge[MVNum];
普里姆算法
步骤:
1.将初始顶点u加入U中,对其余的每一个顶点vj,将closedge[j]均初始化为到u的边信息
2.循环n-1次:
从各组边closedge中选出最小边closedge[k],输出此边
将k加入到U中
更新剩余的每组最小边信息closedge[j],对于V-U中的边,新增加了一条从k到j的边,如果新边的权值比closedge[j].lowcost小,则将closedge[j].lowcost更新为新边的权值
算法描述:
void MiniSpanTree_Prim(AMGraph G,VerTexType u){ //无向网G以邻接矩阵形式储存,从顶点u出发构造G的最小生成树T,输出T的各条边 k=LocateVex(G,u);//k为顶点u的下标 for(j=0;j<G.vexnum;++j)//对V-U的每一个顶点vj,初始化closedge[j] if(j!=k) closedge[j]={u,G.arcs[k][j]}; clsoedge[k].lowcost=0;//初始,U={u} for(i=1;i<G.vexnum;++i){ //选择其余n-1个顶点,生成n-1条边 k=Min(closedge); u0=closedge[k].adjvex;//u0为最小边的一个顶点,u0属于U v0=G.vexs[k];//v0为最小边的另一个顶点,v0属于V-U cout<<u0<<v0; closedge[k].lowcost=0; for(j=0;j<G.vexnum;++j) if(G.arcs[k][j]<closedge[j].lowcost)//新顶点并入U后重新选择最小边 closedge[j]={G.vexs[k],G.arcs[k][j]}; } }
算法时间复杂度为O(n的平方)
阅读全文
0 0
- 最小生成树Prim算法C语言
- 最小生成树Kruskal算法C语言
- Prim最小生成树算法(C++)
- Kruscal最小生成树算法(C++)
- 最小生成树 kruscal算法 C语言
- 普里姆最小生成树算法
- 普里姆最小生成树算法
- 普里姆算法--最小生成树
- 最小生成树(普里姆算法)
- 普里姆--最小生成树算法
- 最小生成树--普里姆算法
- 最小生成树---普里姆算法
- 最小生成树算法---普里姆Prim算法
- 最小生成树算法---普里姆Prim算法
- [C++]最小生成树--Prim算法&Kruskal算法
- 最小生成树算法
- 最小生成树算法
- 最小生成树算法
- 从零开始,学习web前端之HTML基础
- 【R的机器学习】机器学习概述和决策树
- 如何将Mysql中的datetime时间格式后面的.0去掉
- Python日期时间函数
- 加载页面时 lygrid 默认选中
- 最小生成树:普里姆算法.c++
- 面试简历可以用到的经典
- 手把手教你搭建SpringMVC
- Image
- C++设计模式十一--IteratorPattern(迭代器模式)
- spark上部署微服务
- CentOS安装strongLoop
- 最全的mysql学习笔记
- SpringMVC