数据结构 最小生成树 prim算法(普里姆算法)C语言实现 |
您所在的位置:网站首页 › kruskal算法求最小生成树代码 › 数据结构 最小生成树 prim算法(普里姆算法)C语言实现 |
普里姆(prim)算法
一、定义二、思路三、代码实现四、代码解析
一、定义
普里姆算法是一种构造性算法。假设G = (V, E)是一个具有n个顶点的带权连通图,T = (U,TE)是最小生成树,其中U是T的顶点集,TE是T的边集,则由G构造从起始点v出法的最小生成树T的步骤如下: 初始化U = { v },以v到其他顶点的所有边为侯选边。重复以下步骤(n - 1)次,使得其他(n - 1)个顶点被加入U中。(1). 从候选边中挑选权值最小的边加入TE,设该边在V—U中的顶点是k,将k加入U中。 (2). 考察当前V—U中的所有顶点j,修改侯选边,若(k,j)的权值小于原来和顶点关联的侯选边,则用(k,j)取代后者作为侯选边。 二、思路我们可以将定义理解为:将图的所有顶点分为两类,A类(保存已经查找过的顶点),B类(保存未查找过的顶点),从任一顶点开始,并将其从B类移至A类,然后开始寻找B类中(的顶点)到A类顶点之间权值最小的顶点,将其从B类中移至A类,重复上述操作,直至B类中没有顶点。所走过的顶点和边就是该连通图的最小生成树。 由此图为例: A类 = { } B类 = { 0, 1, 2, 3, 4, 5, 6 } 假设从顶点2开始遍历 A类 = { 2 } B类 = { 0, 1, 3, 4, 5, 6 } 遍历第一次后 A类 = {2, 3 } B类 = { 0, 1, 4, 5, 6 } 遍历第二次后 A类 = { 1, 2, 3 } B类 = { 0, 4, 5, 6 } 由此类推,直至B类中无顶点。 A类 = { 0, 1, 2, 3, 4, 5, 6 } B类 = { } 图型讲解如下: 假设从顶点2开始遍历。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |