图的连通性最小生成树的算法思想精.ppt

上传人:石*** 文档编号:64374042 上传时间:2022-11-29 格式:PPT 页数:35 大小:4.13MB
返回 下载 相关 举报
图的连通性最小生成树的算法思想精.ppt_第1页
第1页 / 共35页
图的连通性最小生成树的算法思想精.ppt_第2页
第2页 / 共35页
点击查看更多>>
资源描述

《图的连通性最小生成树的算法思想精.ppt》由会员分享,可在线阅读,更多相关《图的连通性最小生成树的算法思想精.ppt(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、图的连通性最小生成树的算法思想第1页,本讲稿共35页1.1.算法思想算法思想 假设假设N=(V,E)是连通网是连通网,TE是是N上最小生成树中边的上最小生成树中边的集合集合,算法从算法从U=vk,TE=开始开始(即从即从vk出发求最小生出发求最小生成树成树,vkV)。重复执行下述操作:。重复执行下述操作:在所有的边在所有的边(vi,vj)E(viU,vjV-U)中寻找一条权中寻找一条权值最小的边值最小的边(vi,vj)将其添加到将其添加到TE中中(或打印之或打印之),同时把同时把vj添添 加到集合加到集合U 中中。反复执行上述操作反复执行上述操作n-1次(或所有顶点全部加入次(或所有顶点全部加

2、入U时时为止)。为止)。一、最小生成树一、最小生成树第2页,本讲稿共35页2.实例:V=v1,v2,v3,v4,v5,v6 一、最小生成树一、最小生成树v1v2v3v4v5v66551256463任取uk=v1,则:U=v1,V-U=v2,v3,v4,v5,v6 第3页,本讲稿共35页2.实例:V=v1,v2,v3,v4,v5,v6 一、最小生成树一、最小生成树v1v2v3v4v5v66551256463任取uk=v1,则:U=v1,V-U=v2,v3,v4,v5,v6 取边(v1,v3),则:U=v1,v3V-U=v2,v4,v5,v6 第4页,本讲稿共35页2.实例:V=v1,v2,v3,

3、v4,v5,v6 一、最小生成树一、最小生成树v1v2v3v4v5v66551256463任取uk=v1,则:U=v1,V-U=v2,v3,v4,v5,v6 取边(v1,v3),则:U=v1,v3V-U=v2,v4,v5,v6 取边(v3,v6),则:U=v1,v3,v6V-U=v2,v4,v5 第5页,本讲稿共35页2.实例:V=v1,v2,v3,v4,v5,v6 一、最小生成树一、最小生成树v1v2v3v4v5v66551256463任取uk=v1,则:U=v1,V-U=v2,v3,v4,v5,v6 取边(v1,v3),则:U=v1,v3V-U=v2,v4,v5,v6 取边(v3,v6),

4、则:U=v1,v3,v6V-U=v2,v4,v5 取边(v6,v4),则:U=v1,v3,v6,v4V-U=v2,v5 第6页,本讲稿共35页2.实例:V=v1,v2,v3,v4,v5,v6 一、最小生成树一、最小生成树v1v2v3v4v5v66551256463任取uk=v1,则:U=v1,V-U=v2,v3,v4,v5,v6 取边(v1,v3),则:U=v1,v3V-U=v2,v4,v5,v6 取边(v3,v6),则:U=v1,v3,v6V-U=v2,v4,v5 取边(v6,v4),则:U=v1,v3,v6,v4V-U=v2,v5 取边(v3,v2),则:U=v1,v3,v6,v4,v2V

5、-U=v5 第7页,本讲稿共35页2.实例:V=v1,v2,v3,v4,v5,v6 一、最小生成树一、最小生成树v1v2v3v4v5v66551256463任取uk=v1,则:U=v1,V-U=v2,v3,v4,v5,v6 取边(v1,v3),则:U=v1,v3V-U=v2,v4,v5,v6 取边(v3,v6),则:U=v1,v3,v6V-U=v2,v4,v5 取边(v6,v4),则:U=v1,v3,v6,v4V-U=v2,v5 取边(v3,v2),则:U=v1,v3,v6,v4,v2V-U=v5 取边(v2,v5),则:U=v1,v3,v6,v4,v2,v5V-U=第8页,本讲稿共35页2.

6、实例:V=v1,v2,v3,v4,v5,v6 一、最小生成树一、最小生成树v1v2v3v4v5v66551256463任取uk=v1,则:U=v1,V-U=v2,v3,v4,v5,v6 取边(v1,v3),则:U=v1,v3V-U=v2,v4,v5,v6 取边(v3,v6),则:U=v1,v3,v6V-U=v2,v4,v5 取边(v6,v4),则:U=v1,v3,v6,v4V-U=v2,v5 取边(v3,v2),则:U=v1,v3,v6,v4,v2V-U=v5 取边(v2,v5),则:U=v1,v3,v6,v4,v2,v5V-U=第9页,本讲稿共35页3.算法的实现:一、最小生成树一、最小生成

7、树v1v2v3v4v5v66551256463 用一个辅助的一维数组closedge0.n-1存储n个顶点到U的距离:即对于每一个viV-U,1in,1)用closedgei-1.lowcost存储vi到U的最短距离(若vi已属于U中的元素,则vi到U的距离为0);2)用closedgei-1.adjvex存储vi到U的最短距离所邻接的那个顶点的值。用顺序存储结构(Mgraph G)存储图,即利用一个二维数组(G.arcs)存储图的邻接矩阵,用一个一维数组(G.vexs)存储各顶点的值。第10页,本讲稿共35页一、最小生成树一、最小生成树v1v2v3v4v5v66551256463 数据结构的

8、动态分析 6 1 5 6 5 3 1 5 5 6 4 5 6 5 2 3 6 6 4 2 6 G.arcs如下:012345 0 1 2 3 4 5 算法执行期间一维数组closedge的动态变化过程:3.算法的实现:iclosedge012345UV-UKadjvexlowcostv10v16v11v15v1v1v1v2,v3,v4,v5,v601234501G.vexs:v1v2v3v4v5v6 0 1 2 3 4 5 第11页,本讲稿共35页一、最小生成树一、最小生成树v1v2v3v4v5v66551256463 数据结构的动态分析 6 1 5 6 5 3 1 5 5 6 4 5 6 5

9、 2 3 6 6 4 2 6 G.arcs如下:012345 0 1 2 3 4 5 算法执行期间一维数组closedge的动态变化过程:3.算法的实现:iclosedge012345UV-UKadjvexlowcostv10v16v11v15v1v1v1v2,v3,v4,v5,v601234501G.vexs:v1v2v3v4v5v6 0 1 2 3 4 5 第12页,本讲稿共35页一、最小生成树一、最小生成树v1v2v3v4v5v66551256463 数据结构的动态分析 6 1 5 6 5 3 1 5 5 6 4 5 6 5 2 3 6 6 4 2 6 G.arcs如下:012345 0

10、 1 2 3 4 5 算法执行期间一维数组closedge的动态变化过程:3.算法的实现:iclosedge012345UV-UKadjvexlowcostv10v16v11v15v1v1v1v2,v3,v4,v5,v6201234501G.vexs:v1v2v3v4v5v6 0 1 2 3 4 5 打印(v1,v3),也即打印:(closedgek.adjvex,G.vexsk)第13页,本讲稿共35页一、最小生成树一、最小生成树v1v2v3v4v5v66551256463 数据结构的动态分析 6 1 5 6 5 3 1 5 5 6 4 5 6 5 2 3 6 6 4 2 6 G.arcs如

11、下:012345 0 1 2 3 4 5 算法执行期间一维数组closedge的动态变化过程:3.算法的实现:iclosedge012345UV-UKadjvexlowcostv10v16v10v15v1v1v1v2,v3,v4,v5,v6201234501G.vexs:v1v2v3v4v5v6 0 1 2 3 4 5 用二维数组的第K行与这里的lowcost行中的元素依次比较,若发现距离变小了,则用小值替代大值,且用G.vexsK 的值的值(即v3)取代相应的adjvex的值。第14页,本讲稿共35页一、最小生成树一、最小生成树v1v2v3v4v5v66551256463 数据结构的动态分析

12、 6 1 5 6 5 3 1 5 5 6 4 5 6 5 2 3 6 6 4 2 6 G.arcs如下:012345 0 1 2 3 4 5 算法执行期间一维数组closedge的动态变化过程:3.算法的实现:iclosedge012345UV-UKadjvexlowcostv10v35v10v15v36v34v1v2,v4,v5,v6201234501G.vexs:v1v2v3v4v5v6 0 1 2 3 4 5 第15页,本讲稿共35页一、最小生成树一、最小生成树v1v2v3v4v5v66551256463 数据结构的动态分析 6 1 5 6 5 3 1 5 5 6 4 5 6 5 2 3

13、 6 6 4 2 6 G.arcs如下:012345 0 1 2 3 4 5 算法执行期间一维数组closedge的动态变化过程:3.算法的实现:iclosedge012345UV-UKadjvexlowcostv10v35v10v15v36v34v1,v3v2,v4,v5,v601234501G.vexs:v1v2v3v4v5v6 0 1 2 3 4 5 第16页,本讲稿共35页一、最小生成树一、最小生成树v1v2v3v4v5v66551256463 数据结构的动态分析 6 1 5 6 5 3 1 5 5 6 4 5 6 5 2 3 6 6 4 2 6 G.arcs如下:012345 0 1

14、 2 3 4 5 算法执行期间一维数组closedge的动态变化过程:3.算法的实现:iclosedge012345UV-UKadjvexlowcostv10v35v10v15v36v34v1,v3v2,v4,v5,v6501234501G.vexs:v1v2v3v4v5v6 0 1 2 3 4 5 打印(v3,v6),也即打印:(closedge5.adjvex,G.vexs5)第17页,本讲稿共35页一、最小生成树一、最小生成树v1v2v3v4v5v66551256463 数据结构的动态分析 6 1 5 6 5 3 1 5 5 6 4 5 6 5 2 3 6 6 4 2 6 G.arcs如

15、下:012345 0 1 2 3 4 5 算法执行期间一维数组closedge的动态变化过程:3.算法的实现:iclosedge012345UV-UKadjvexlowcostv10v35v10v15v36v30v1,v3v2,v4,v5,v6501234501G.vexs:v1v2v3v4v5v6 0 1 2 3 4 5 用二维数组的第K行与这里的lowcost行中的元素依次比较,若发现距离变小了,则用小值替代大值,且用G.vexsK 的值的值(即v6)取代相应的adjvex的值。第18页,本讲稿共35页一、最小生成树一、最小生成树v1v2v3v4v5v66551256463 数据结构的动态

16、分析 6 1 5 6 5 3 1 5 5 6 4 5 6 5 2 3 6 6 4 2 6 G.arcs如下:012345 0 1 2 3 4 5 算法执行期间一维数组closedge的动态变化过程:3.算法的实现:iclosedge012345UV-UKadjvexlowcostv10v35v10v62v36v30v1,v3,v6v2,v4,v5501234501G.vexs:v1v2v3v4v5v6 0 1 2 3 4 5 第19页,本讲稿共35页一、最小生成树一、最小生成树v1v2v3v4v5v66551256463 数据结构的动态分析 6 1 5 6 5 3 1 5 5 6 4 5 6

17、5 2 3 6 6 4 2 6 G.arcs如下:012345 0 1 2 3 4 5 算法执行期间一维数组closedge的动态变化过程:3.算法的实现:iclosedge012345UV-UKadjvexlowcostv10v35v10v62v36v30v1,v3,v6v2,v4,v501234501G.vexs:v1v2v3v4v5v6 0 1 2 3 4 5 第20页,本讲稿共35页一、最小生成树一、最小生成树v1v2v3v4v5v66551256463 数据结构的动态分析 6 1 5 6 5 3 1 5 5 6 4 5 6 5 2 3 6 6 4 2 6 G.arcs如下:01234

18、5 0 1 2 3 4 5 算法执行期间一维数组closedge的动态变化过程:3.算法的实现:iclosedge012345UV-UKadjvexlowcostv10v35v10v62v36v30v1,v3,v6v2,v4,v5301234501G.vexs:v1v2v3v4v5v6 0 1 2 3 4 5 打印(v6,v4),也即打印:(closedge3.adjvex,G.vexs3)第21页,本讲稿共35页一、最小生成树一、最小生成树v1v2v3v4v5v66551256463 数据结构的动态分析 6 1 5 6 5 3 1 5 5 6 4 5 6 5 2 3 6 6 4 2 6 G.

19、arcs如下:012345 0 1 2 3 4 5 算法执行期间一维数组closedge的动态变化过程:3.算法的实现:iclosedge012345UV-UKadjvexlowcostv10v35v10v60v36v30v1,v3,v6v2,v4,v5301234501G.vexs:v1v2v3v4v5v6 0 1 2 3 4 5 用二维数组的第K行与这里的lowcost行中的元素依次比较,若发现距离变小了,则用小值替代大值,且用G.vexsK 的值的值(即v4)取代相应的adjvex的值。第22页,本讲稿共35页一、最小生成树一、最小生成树v1v2v3v4v5v66551256463 数据

20、结构的动态分析 6 1 5 6 5 3 1 5 5 6 4 5 6 5 2 3 6 6 4 2 6 G.arcs如下:012345 0 1 2 3 4 5 算法执行期间一维数组closedge的动态变化过程:3.算法的实现:iclosedge012345UV-UKadjvexlowcostv10v35v10v60v36v30v1,v3,v6,v4v2,v501234501G.vexs:v1v2v3v4v5v6 0 1 2 3 4 5 第23页,本讲稿共35页一、最小生成树一、最小生成树v1v2v3v4v5v66551256463 数据结构的动态分析 6 1 5 6 5 3 1 5 5 6 4

21、5 6 5 2 3 6 6 4 2 6 G.arcs如下:012345 0 1 2 3 4 5 算法执行期间一维数组closedge的动态变化过程:3.算法的实现:iclosedge012345UV-UKadjvexlowcostv10v35v10v60v36v30v1,v3,v6,v4v2,v5101234501G.vexs:v1v2v3v4v5v6 0 1 2 3 4 5 打印(v3,v2),也即打印:(closedge1.adjvex,G.vexs1)第24页,本讲稿共35页一、最小生成树一、最小生成树v1v2v3v4v5v66551256463 数据结构的动态分析 6 1 5 6 5

22、3 1 5 5 6 4 5 6 5 2 3 6 6 4 2 6 G.arcs如下:012345 0 1 2 3 4 5 算法执行期间一维数组closedge的动态变化过程:3.算法的实现:iclosedge012345UV-UKadjvexlowcostv10v30v10v60v36v30v1,v3,v6,v4v2,v5101234501G.vexs:v1v2v3v4v5v6 0 1 2 3 4 5 用二维数组的第K行与这里的lowcost行中的元素依次比较,若发现距离变小了,则用小值替代大值,且用G.vexsK 的值的值(即v2)取代相应的adjvex的值。第25页,本讲稿共35页一、最小生

23、成树一、最小生成树v1v2v3v4v5v66551256463 数据结构的动态分析 6 1 5 6 5 3 1 5 5 6 4 5 6 5 2 3 6 6 4 2 6 G.arcs如下:012345 0 1 2 3 4 5 算法执行期间一维数组closedge的动态变化过程:3.算法的实现:iclosedge012345UV-UKadjvexlowcostv10v30v10v60v23v30v1,v3,v6,v4,v2v501234501G.vexs:v1v2v3v4v5v6 0 1 2 3 4 5 第26页,本讲稿共35页一、最小生成树一、最小生成树v1v2v3v4v5v6655125646

24、3 数据结构的动态分析 6 1 5 6 5 3 1 5 5 6 4 5 6 5 2 3 6 6 4 2 6 G.arcs如下:012345 0 1 2 3 4 5 算法执行期间一维数组closedge的动态变化过程:3.算法的实现:iclosedge012345UV-UKadjvexlowcostv10v30v10v60v23v30v1,v3,v6,v4,v2v5401234501G.vexs:v1v2v3v4v5v6 0 1 2 3 4 5 打印(v2,v5),也即打印:(closedge4.adjvex,G.vexs4)第27页,本讲稿共35页一、最小生成树一、最小生成树v1v2v3v4v

25、5v66551256463 数据结构的动态分析 6 1 5 6 5 3 1 5 5 6 4 5 6 5 2 3 6 6 4 2 6 G.arcs如下:012345 0 1 2 3 4 5 算法执行期间一维数组closedge的动态变化过程:3.算法的实现:iclosedge012345UV-UKadjvexlowcostv10v30v10v60v20v30v1,v3,v6,v4,v2,v501234501G.vexs:v1v2v3v4v5v6 0 1 2 3 4 5 第28页,本讲稿共35页一、最小生成树一、最小生成树3.算法的实现:算法程序第29页,本讲稿共35页 算法程序1.1.复习图的数

26、组表示法复习图的数组表示法(MGgraph)的定义#define INFINITY 10000 /INFINITY用以表示用以表示#define MAX_VERTEX_NUM 20 /最大顶点数最大顶点数enum GraphKind DG,DN,UDG,UDN;/枚举:有向图枚举:有向图,有向网有向网,无向图无向图,无向网无向网typedef struct ArcCell VRType adj;/VRType的类型视具体情况而定。对于带权图,的类型视具体情况而定。对于带权图,adj用以存用以存 /放边或弧上的权值放边或弧上的权值;对于无权图,对于无权图,adj用以存放用以存放0或或1(int类

27、型类型)/InfoType *info;/一般情况下可以不使用该项一般情况下可以不使用该项 ArcCell,AdjMatrix MAX_VERTEX_NUM,MAX_VERTEX_NUM;/AdiMatrix是一个类型为是一个类型为ArcCell的二维数组的二维数组,用以存放弧或边的邻接关系或权值用以存放弧或边的邻接关系或权值typedef struct VertexType vexs MAX_VERTEX_NUM ;/VertexType是顶点值的类型是顶点值的类型 /一维数组一维数组vexs用以存放各顶点的值用以存放各顶点的值 AdjMatrix arcs;/二维数组二维数组arcs存放边

28、或弧上的信息(如权值)存放边或弧上的信息(如权值)int vexnum,arcnum;/这两项分别存放图的顶点数目和弧的条数这两项分别存放图的顶点数目和弧的条数 GraphKind kind;/kind用以存放图的种类标志用以存放图的种类标志 MGraph第30页,本讲稿共35页 算法程序typedef struct Adjvexlowcost VertexType adjvex;int lowcost;Adjvexlowcost,ALListMAX_VERTEX_NUM;ALList closedge;/定义一个一维数组,其每个数组下标变量 /closedgei均有两个分量:adjvex 和

29、lowcost /closedgei.lowcost记录了vi到U的最短距离 /closedgei.adjvex记录了vi到U的这个最短距依赖U中哪个顶点2.求图的最小生成树的辅助一维数组求图的最小生成树的辅助一维数组 closedge的定义 第31页,本讲稿共35页 算法程序void MiniSpanTree_PRIM(MGraph G,VertexType u)k=locateVex(G,u);/在G.vexs0.G.vexnum-1中查找u,将u的序号作为返回值 closedgek.adjvex=u;closedgek.lowcost=0;/将u并入到U中 for(j=0;jG.vexn

30、um;+j)/将邻接矩阵的第k行(如选u=v1,则k=0)作为数组 /closedge的初值 if (!j=k)closedgej.adjvex=u;closedgej.lowcost=G.arcskj.adj;for(i=1;iG.vexnum;+i)/在无向网中找出n-1条边构成最小生成树 k=minimum(closedge);/在数组closedge中查找一个k使得 /closedgek.lowcost是最小的且不等于0 printf(closedgek.adjvex,G.vexk);/输出找到的一条最小代价边 closedgek.lowcost=0;/将vk+1添加到U中 for(j

31、=0;jG.vexnum;+j)/用邻接矩阵的第k行及vk+1修改closedge if (G.arcskj.adj)closedgej.lowcost)closedgej.adjvex=G.vexsk;closedgej.lowcost=G.arcskj.adj;第32页,本讲稿共35页void MiniSpanTree_PRIM(MGraph G,VertexType u)k=locateVex(G,u);/在G.vexs0.G.vexnum-1中查找u,将u的序号作为返回值 closedgek.adjvex=u;closedgek.lowcost=0;/将u并入到U中 for(j=0;j

32、G.vexnum;+j)/将邻接矩阵的第k行(如选u=v1,则k=0)作为数组 /closedge的初值 if (!j=k)closedgej.adjvex=u;closedgej.lowcost=G.arcskj.adj;for(i=1;iG.vexnum;+i)/在无向网中找出n-1条边构成最小生成树 k=minimum(closedge);/在数组closedge中查找一个k使得 /closedgek.lowcost是最小的且不等于0 printf(closedgek.Adjvex,G.vexk);/输出找到的一条最小代价边 closedgek.lowcost=0;/将vk+1添加到U中

33、 for(j=0;jG.vexnum;+j)/用邻接矩阵的第k行及vk+1修改closedge if (G.arcskj.adj)closedgej.lowcost)closedgej.adjvex=G.vexsk;closedgej.lowcost=G.arcskj.adj;/MiniSpanTree_PRIM第33页,本讲稿共35页void MiniSpanTree_PRIM(MGraph G,VertexType u)k=locateVex(G,u);/在G.vexs0.G.vexnum-1中查找u,将u的序号作为返回值 closedgek.adjvex=u;closedgek.lowc

34、ost=0;/将u并入到U中 for(j=0;jG.vexnum;+j)/将邻接矩阵的第k行(如选u=v1,则k=0)作为数组 /closedge的初值 if (!j=k)closedgej.adjvex=u;closedgej.lowcost=G.arcskj.adj;for(i=1;iG.vexnum;+i)/在无向网中找出n-1条边构成最小生成树 k=minimum(closedge);/在数组closedge中查找一个k使得 /closedgek.lowcost是最小的且不等于0 printf(closedgek.Adjvex,G.vexk);/输出找到的一条最小代价边 closedg

35、ek.lowcost=0;/将vk+1添加到U中 for(j=0;jG.vexnum;+j)/用邻接矩阵的第k行及vk+1修改closedge if (G.arcskj.adj)closedgej.lowcost)closedgej.adjvex=G.vexsk;closedgej.lowcost=G.arcskj.adj;/MiniSpanTree_PRIMint minimum(ALList closedge)int k=-1;mini=1000;for(j=0;jG.vexnum;+j)if (closedgej.lowcost!=0&closedgej.lowcostmini)mini=closedgej.lowcost;k=j;return k;/minimum第34页,本讲稿共35页End第35页,本讲稿共35页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁