【数据结构】拾遗(二):连通图邻接矩阵图的prim算法
来源:互联网 发布:java多线程数据同步 编辑:程序博客网 时间:2024/06/10 22:07
连通图的prim算法主要是求连通图的最小生成树。主要的思想是从图上某一点开始,找与之最近的(权重最小的)顶点,保存边和顶点。然后找与这两个点最近的(权重最小的)的顶点。循环往之,并每次保存边和边的顶点,就得到了最小生成树。
具体到算法的实现,根据参考资料,主要是两个数组,一个数组是保存当前未各顶点与已存顶点的最小距离lowcost,另一个一个数组是保存与之最小距离的顶点下标mst,比较并找寻最小的,然后将找到的顶点的lowcost清零(相当于剔除这个点),并根据新的顶点更新lowcost和mst。
这里我用前几天遍历的那个图随机赋值几个权重:
具体的求生成树的演算过程在电脑上写出来太烦了,我比较懒,就整理了我自己的演算草稿,贴图在下:
下面是实现的源代码,我就在前几天写的那个c++中的类添加了两个函数,然后将初始化的权重改了一下,在外部define了一个MAX_Weight。设置值为1000,当然还可以更大。
//prim求最短生成树,前提要是连通图queue<int> Map::prim(){int minweight, minu;queue<int> P;int *lowcost = new int[VertexNum];int *mst = new int[VertexNum];mst[0] = 0;//初始化for (int i = 1; i < VertexNum; i++){lowcost[i] = Edges[0][i];mst[i] = 0;}for (int i = 1; i < VertexNum; i++){minweight = MAX_Weight;//这里是1000minu = 0;for (int j = 1; j < VertexNum; j++){if (lowcost[j] < minweight&& lowcost[j]!=0){minweight = lowcost[j];minu = j;}}//分别push:边两个顶点的下标和边权值P.push(mst[minu]);P.push(minu);P.push(minweight);//push进的顶点置最大,表示不用更新它的权值了lowcost[minu] = 0;//如果新加入的点的权值小于之前的,则更新lowcost和mstfor (int j = 1; j < VertexNum; j++){if (Edges[minu][j] < lowcost[j]){lowcost[j] = Edges[minu][j];mst[j] = minu;}}}return P;}void Map::primout(){queue<int> P = prim();while (!P.empty()){cout << P.front() << "-";P.pop();cout << P.front() << " :";P.pop();cout << P.front() << endl;P.pop();}}最后的输出结果如下:
阅读全文
0 0
- 【数据结构】拾遗(二):连通图邻接矩阵图的prim算法
- 图的邻接矩阵实现(包括PRIM和DIJKSTRA算法)
- 【数据结构】拾遗(一):图的邻接矩阵创建以及其深广度遍历C++实现
- 使用C++邻接矩阵实现图的存储、Prim、Kruskal算法
- (c++)数据结构与算法之图:邻接矩阵、深度广度遍历、构造最小生成树(prim、kruskal算法)
- 数据结构——邻接矩阵的最小生成Prim算法
- 数据结构——邻接矩阵的最小生成树Prim算法
- 最小生成树 prim算法实现(利用图的邻接矩阵来存放图)
- 数据结构---图的邻接矩阵
- tarjan算法求有向图的强连通分量(邻接矩阵实现)
- [数据结构] 图的Prim算法实现
- 基于邻接矩阵的Prim算法(C语言实现)
- Prim算法的C语言实现(邻接矩阵)
- 【数据结构】以邻接矩阵作存储结构,求连通分量的个数,设计算法求图G的深度,深度优先序列输出
- 数据结构(C++)<图的邻接矩阵存储>
- 图基本算法 最小生成树 Prim算法(邻接表/邻接矩阵+优先队列STL)
- 数据结构——邻接矩阵表示的图的Floyd算法
- 数据结构——邻接矩阵表示的图的Dijkstra算法
- HDU 2304 Electrical Outlets
- struts2 ajax保存数据刷新问题
- TOJ 4080 find the princessIII(圆和直线相交)
- C#调用Python模块
- 《算法导论》第二章-第2节_练习(参考答案)
- 【数据结构】拾遗(二):连通图邻接矩阵图的prim算法
- 手写python爬虫第二弹
- css3实现圆形进度加载动画
- MarkDownPad2简单使用
- Ubuntu14.04下tftp安装,并与开发板通信。
- Java引用类型
- C#应用 uploadify 上传前判断文件是否存在
- Struts2_生成验证码实例
- jQuery 判断 CheckBox是否被选中