博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图的最小生成树(普利姆prim算法)
阅读量:6952 次
发布时间:2019-06-27

本文共 1616 字,大约阅读时间需要 5 分钟。

什么是生成树呢?

一个连通图的生成树是指一个极小连通子图, 它含有图中的全部顶点,但只有足以构成一棵树的n-1条边。

什么是最小生成树?

在一个连通图的所有生成树中,各边的代价之和最小的那棵生成树称为该连通图的最小代价生成树(MST), 简称最小生成树。

求最小生成树有两种算法,本文讲prim算法。

简略证明

使用反证法证明

设一棵最小生成树T不包含最短边a,将a加入最小生成树T中,书中必定构成一个包含a的回路,而回路中必定有边比a大(因a为最短边),则删除比a大的边得到一棵比原先T更小的树T1,而T1才是最小生成树,则与假设矛盾,证明成立。

prim算法

将树的所有点划分为两个集合U 和 V

每次选一个最小代价的点从V加入U中,然后更新V中的点到U的最小代价,周而复始直到V为空。

1 #include 
2 using namespace std; 3 #define MAX_VERTEX_NUM 20 4 #define INFINTY 32768 5 typedef int AdjType;//权值类型 6 typedef enum{DG, DN, UDG, UDN} GraphKind; 7 typedef char VertexData; 8 //边集 9 typedef struct ArcNode{10 AdjType adj;11 //Other info12 }ArcNode;13 typedef struct{14 VertexData vertex[MAX_VERTEX_NUM];15 ArcNode arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];16 int vexnum, arcnum;17 GraphKind kind;18 }AdjMatrix;19 struct{20 int adjvex;21 int lowcost;22 }closedge[MAX_VEX_NUM];23 24 MiniSpanTree_Prim(AdjMatrix gn, int u){25 closedge[u].lowcost = 0;26 for(int i = 0; i< gn.vexnum; i++) //初始化27 if(i != u){28 closedge[i].adjvex = u;29 closedge[i].lowcost = gn.arcs[u][i].adj;30 }31 for(int e = 1; i < = gn.vexnum-1;e++){32 int v = Minium(closedge); //the minium cost from V to U33 int u = closedge[v].adjvex;34 // printf();35 closedge[v].lowcost = 0; //add v to U36 for(int i = 0; i< gn.vexnum; i++)37 if(gn.arcs[v][i].adjgn.arcs[v][i].adj < closedge[i].lowcost){38 closedge[i].lowcost = gn.arcs[v][i].adj;39 closedge[i].adjvex = v;40 }41 }42 43 }

 

转载于:https://www.cnblogs.com/19990219073x/p/10048909.html

你可能感兴趣的文章
Debian系统安装xen并创建win2003虚拟机
查看>>
Exchange 2013学习,查看邮件头
查看>>
在Virtualbox虚拟机内外用GoodSync做文件同步的实现
查看>>
我的友情链接
查看>>
ubuntu 远程windows
查看>>
我的友情链接
查看>>
Active Diretory 全攻略(五)--规划和建立组
查看>>
收集与当前登录用户、启动日志及启动 故障的相关信息
查看>>
Struts2笔记——4.异常处理
查看>>
无线定位技术--新科技应走面向百姓面向生活之路
查看>>
Java获取时间与系统时间相差8小时的解决方法
查看>>
IPv6基础_常见的IPv6地址及其前缀(一)
查看>>
ELK部署
查看>>
MySQL建表语句转PostgreSQL建表语句全纪录
查看>>
关于chkconfig及运行级别对应的脚本的实现过程
查看>>
开源jar包Jackson
查看>>
redis
查看>>
jmeter监控服务器的CPU和内存使用情况
查看>>
C++【面试题】:类实现万年历(日期计算器),(含构造函数、拷贝构造、运算符重载、析构函数)...
查看>>
老李分享:《Linux Shell脚本攻略》 要点(八)上
查看>>