算法设计与分析.pdfVIP

  • 823
  • 0
  • 约1.09万字
  • 约 12页
  • 2021-11-25 发布于河北
  • 举报
算法设计与分析 1.编写 prim 算法求最小带权生成树,并分析其时间复杂度和结果。 一、问题描述: 题目的要求使用 prim 算法从一个带权无向完全图中选择 n-1 条边并使这个 图仍然连通 (也即得到了一棵生成树 ),同时还要考虑使树的权最小。 二、算法设计与分析: 1.算法设计: 使用 prim 算法构造最小生成树具有以下性质: (1)假设 N=(V,{E}) 是一个连 通图, U 是顶点集 V 的一个非空子集。若 (u,v)是一条具有最小权值的边,其中 u 包含于 U,v 包含于 V-U ,则必存在一颗包含边 (u,v) 的最小生成树。也可以说, 我们维持一个集合 S 包含与 V ,在它上面已构造了到这步为止的生成树,初始, S={s} 。每次迭代我们在 S 中增加一个结点,把结点 v 加入 S 能使权值 min(e)=(u,v):u 属于 S,C(e)达到最小,并且包含了生成树中达到这个最小值的边 e=(u,v)。这样就解决问题了。 2.算法描述: 从 U={u0},u0 属于 V ,S={} 开始,重复执行以下步骤:在所有 u 属于 U ,v 属于 V-U 的边(u,v)属于 E 中找到一条权值最小的边 (u0.v0)并入集合 S,同时 v0 并入 U ,知道 U=V 为止,此时 S 中必有 n-1 条边, 则 T=(V,{S}) 为 G 的最小生成 树。 3.时间复杂度: O(n2) ,n 为顶点数。 三、程序实现: 1.程序设计的基本思路: (1)构造图函数。初始状态各个顶点都是独立的,根据 PRIM 算法,构造邻 接矩阵,将各条边的权值写进矩阵。再将各个点的权值排序,选择权最小的边 , 知道所有的顶点以 n-1 条边连接即结束,生成最小生成树。 (2)程序内部实现的说明:本程序采用嵌套及其循环调用的方法实现最小生 成树。 采用调用 PRIM 算法函数 void prim() 。程序流程图为: 开始 定义邻接矩阵数组 tb[][] ,权值 排序数 key[] 组和结点数组 p[]; 定义结点数和边数变量 n,m , 中间变量 i 、j ,和当前两结点 与边变量 u, v, w ; 将矩阵全部初始化为 INT_MAX 输入结点序号和相应权值 调用 prim 算法 结束 Prim 算法详解: a.将结点锁定变量锁定到第一个结点上; b.将结点的所有边权值排序(输入到 k[ ] ); c..找出其中最小的非零值存入变量 min ;将 min 的值加到总的权值变量 total ; d.输出最小权值边的两个结点及权值; e.将这条边的权值置为 0; f. 当此结点为最后一个结点时,跳至 g 执行;否则判断刚才连通的第二个 结点是否可以作为下次连通的起点。如果是则以此结点作为起点,跳入

文档评论(0)

1亿VIP精品文档

相关文档