关于最小生成树的概念,在前一篇文章中已经讲到,就不在赘述了。下面介绍Prime算法:

        其基本思想为:从一个顶点出发,选择由该顶点出发的最小权值边,并将该边的另一个顶点包含进来,然后找出由这两个顶点出发的最小边,依此类推,直至包含所有的顶点。如果期间构成环,就舍弃该边,继续寻找最小边。下面以具体实例来说明算法的过程:

具体的程序实现如下:

#include<stdio.h>

#define N 6 //顶点数
#define MAX 10000
typedef struct
{
int startvex,endvex;//边的起点和终点2
int length;//边的权值
}edge; int flag[N]={0};//标志顶点是否被选定
int flag1=0;//记录边的终点
int flag2=0;//记录边的起点 void Prime(int i,int dist[N][N],edge T[N-1])
{
int j,k,min;
int num=0;
flag[i]=1;//包含顶点置为1
while(num<5)//6个顶点则有5条边
{
min=MAX;
for(j=0;j<N;j++)//从已选边中找到最小权值的边
{
if(flag[j]==1)
for(k=0;k<N;k++)
{
if(dist[j][k]<min)
{
min=dist[j][k];
flag1=k;//记录当前最小权值边的起点和终点
flag2=j;
}
}
} if(flag[flag1]!=1)//判断是否构成回路
{
T[num].startvex=flag2;//将找到的最小权值边记录
T[num].endvex=flag1;
T[num].length=dist[flag2][flag1];
num++;
flag[flag1]=1;
}
dist[flag2][flag1]=MAX;//将已经选择的边的权值置为无穷大
}
for(int i=0;i<N-1;i++)
printf("start=%d,end=%d,length=%d\n",T[i].startvex,T[i].endvex,T[i].length);
} void main()
{
int dist[N][N]={{MAX,10,MAX,MAX,19,21},
{10,MAX,5,6,MAX,11},
{MAX,5,MAX,6,MAX,MAX},
{MAX,6,6,MAX,18,14},
{19,MAX,MAX,18,MAX,33},
{21,11,MAX,14,33,MAX}};
edge T[N-1];
Prime(1,dist,T);//1代表从序号为一的顶点开始
}

运行结果如下:

注意最小生成树不是唯一的,但是总权值是一样的。

注:如果程序出错,可能是使用的开发平台版本不同,请点击如下链接: 解释说明

最新文章

  1. 不懂CSS也能定制博客界面!
  2. 《Web开发中让盒子居中的几种方法》
  3. Mac OS平台下应用程序安装包制作工具Packages的使用介绍
  4. NetCore 阿里大于发送短信
  5. Web开发中20个很有用的CSS库
  6. CentOS7 下 安装 supervisor以及使用
  7. Jenkins进阶系列之——08Jenkins纳入版本控制
  8. 三、freemarker数据、模版指令
  9. 递归法绑定文件夹到导航树&amp;在指定文件夹下新建文件夹
  10. ntpath join(path, *paths) 发生UnicodeDecodeError的Bug的解决方案
  11. git入门超详细(转载)
  12. logstash multiline
  13. SDWebImage缓存
  14. Friendship of Frog(水题)
  15. maven-assembly-plugin插件的使用方法
  16. Python之禅及其翻译
  17. Python_Runoob
  18. Jsの练习-数组常用方法 -forEach()
  19. python网页爬虫开发之二
  20. openresty的安装和使用

热门文章

  1. 自己构建MVC中的M
  2. 【J2EE性能分析篇】JVM参数对J2EE性能优化的影响
  3. XE7 - Image的双击事件无响应,咋整?(已解决)
  4. 【appium】关于logcat
  5. 剑指offer-第三章高质量的代码(输出该链表中倒数第K个节点)
  6. iOS学习笔记之Category
  7. Spring依赖注入 --- 简单使用说明
  8. webstorm启动bug
  9. JDK Environment Variable And Change default JDK
  10. STL&amp;quot;源码&amp;quot;剖析-重点知识总结