最小生成树ppt课件

上传人:风*** 文档编号:168956671 上传时间:2022-11-13 格式:PPT 页数:20 大小:131.50KB
收藏 版权申诉 举报 下载
最小生成树ppt课件_第1页
第1页 / 共20页
最小生成树ppt课件_第2页
第2页 / 共20页
最小生成树ppt课件_第3页
第3页 / 共20页
资源描述:

《最小生成树ppt课件》由会员分享,可在线阅读,更多相关《最小生成树ppt课件(20页珍藏版)》请在装配图网上搜索。

1、 tail head cost 边的两个顶点位置边的两个顶点位置 边的权值边的权值const int MAXINT=机器可表示的机器可表示的,问题中不可问题中不可 能出现的大数能出现的大数class MinSpanTree;class MSTEdgeNode /生成树边结点类定义生成树边结点类定义friend class MinSpanTree;private:int tail,head;/生成树各边的两顶点生成树各边的两顶点 float cost;/生成树各边的代价生成树各边的代价;class MinSpanTree /生成树的类定义生成树的类定义public:MinSpanTree(int

2、 sz=NumVertices-1):MaxSize(sz),n(0)edgevalue=new MSTEdgeNodeMaxSize;int Insert(MSTEdgeNode&item);/将将item加到最小生成树中加到最小生成树中protected:MSTEdgeNode*edgevalue;/边值数组边值数组 int MaxSize,n;/最大边数最大边数,当前边数当前边数;void Graph:Kruskal(MinSpanTree&T)MSTEdgeNode e;/边结点辅助单元边结点辅助单元 MinHeap H(CurrentEdges);int NumVertices=Ve

3、rticesList.last;/顶点个数顶点个数 UFSets F(NumVertices);/并查集并查集F 并初始化并初始化 for(int u=0;u NumVertices;u+)/邻接矩阵邻接矩阵 for(int v=u+1;v NumVertices;v+)if(Edgeuv!=MAXNUM)/所有边所有边 e.tail=u;e.head=v;e.cost=Edgeuv;H.Insert(e);/插入堆插入堆 int count=1;/最小生成树加入边数的计数最小生成树加入边数的计数 while(count NumVertices)H.RemoveMin(e);/从堆中退出一条边

4、从堆中退出一条边 u=F.Find(e.tail);/检测两端点的根检测两端点的根v=F.Find(e.head);if(u!=v)/根不同不在同一连通分量根不同不在同一连通分量 F.Union(u,v);/合并合并 T.Insert(e);/该边存入最小生成树该边存入最小生成树 T count+;(0,5,10)选中选中 (2,3,12)选中选中(1,6,14)选中选中 (1,2,16)选中选中 (3,6,18)舍弃舍弃(3,4,22)选中选中 (4,6,24)舍弃舍弃 (4,5,25)选中选中并查集邻接矩阵表示-2-2-2-2-1-1-1-1-1-1-1-1-1-1-1-102-1-1-1

5、0-2200000 1 2 3 4 5 6-21-11-2-1-421-2-51211-711211F 0 1 2 3 4 5 6 0 28 10 028 0 16 14 1 16 0 12 2 12 0 22 18 3 22 0 25 24 410 25 0 5 14 18 24 0 6继续重复得继续重复得:顶点顶点5加入生成树顶点集合:加入生成树顶点集合:v=5v=4(0,5,10),(5,4,25),(4,3,22),(3,2,12),(2,1,16),(1,6,14)void Graph:Prim(MinSpanTree&T)int NumVertices=VerticesList.l

6、ast;/图顶点数图顶点数 float*lowcost=new floatNumVertices;int*nearvex=new intNumVertices;for(int i=1;i NumVertices;i+)lowcosti=Edge0i;/顶点顶点0到各边的代价到各边的代价 nearvexi=0;/及最短带权路径及最短带权路径 nearvex0=-1;/顶点顶点0加到生成树顶点集合加到生成树顶点集合 MSTEdgeNode e;/最小生成树结点辅助单元最小生成树结点辅助单元 for(i=1;i NumVertices;i+)/循环循环n-1次次,加入加入n-1条边条边 float

7、min=MAXNUM;int v=0;for(int j=0;j NumVertices;j+)if(nearvexj!=-1&lowcostj min)v=j;min=lowcostj;/求生成树外顶点到生成树内顶点具有最小求生成树外顶点到生成树内顶点具有最小 /权值的边权值的边,v是是当前具最小权值的边的位置当前具最小权值的边的位置 if(v)/v=0表示再也找不到要求顶点了表示再也找不到要求顶点了 e.tail=nearvexv;e.head=v;e.cost=lowcostv;T.Insert(e);/选出的边加入生成树选出的边加入生成树 nearvexv=-1;/作该边已加入生成树标记作该边已加入生成树标记 for(j=1;j NumVertices;j+)if(nearvexj!=-1&/j 不在生成树中不在生成树中 Edgevj lowcostj)/需要修改需要修改 lowcostj=Edgevj;nearvexj=v;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!