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

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

具体的程序实现如下:

  1. #include<stdio.h>
  2.  
  3. #define N 6 //顶点数
  4. #define MAX 10000
  5. typedef struct
  6. {
  7. int startvex,endvex;//边的起点和终点2
  8. int length;//边的权值
  9. }edge;
  10.  
  11. int flag[N]={0};//标志顶点是否被选定
  12. int flag1=0;//记录边的终点
  13. int flag2=0;//记录边的起点
  14.  
  15. void Prime(int i,int dist[N][N],edge T[N-1])
  16. {
  17. int j,k,min;
  18. int num=0;
  19. flag[i]=1;//包含顶点置为1
  20. while(num<5)//6个顶点则有5条边
  21. {
  22. min=MAX;
  23. for(j=0;j<N;j++)//从已选边中找到最小权值的边
  24. {
  25. if(flag[j]==1)
  26. for(k=0;k<N;k++)
  27. {
  28. if(dist[j][k]<min)
  29. {
  30. min=dist[j][k];
  31. flag1=k;//记录当前最小权值边的起点和终点
  32. flag2=j;
  33. }
  34. }
  35. }
  36.  
  37. if(flag[flag1]!=1)//判断是否构成回路
  38. {
  39. T[num].startvex=flag2;//将找到的最小权值边记录
  40. T[num].endvex=flag1;
  41. T[num].length=dist[flag2][flag1];
  42. num++;
  43. flag[flag1]=1;
  44. }
  45. dist[flag2][flag1]=MAX;//将已经选择的边的权值置为无穷大
  46. }
  47. for(int i=0;i<N-1;i++)
  48. printf("start=%d,end=%d,length=%d\n",T[i].startvex,T[i].endvex,T[i].length);
  49. }
  50.  
  51. void main()
  52. {
  53. int dist[N][N]={{MAX,10,MAX,MAX,19,21},
  54. {10,MAX,5,6,MAX,11},
  55. {MAX,5,MAX,6,MAX,MAX},
  56. {MAX,6,6,MAX,18,14},
  57. {19,MAX,MAX,18,MAX,33},
  58. {21,11,MAX,14,33,MAX}};
  59. edge T[N-1];
  60. Prime(1,dist,T);//1代表从序号为一的顶点开始
  61. }

运行结果如下:

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

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

原文:http://blog.csdn.net/tengweitw/article/details/17421329

作者:nineheadedbird

【算法导论】最小生成树之Prime法的更多相关文章

  1. 算法导论--最小生成树(Kruskal和Prim算法)

    转载出处:勿在浮沙筑高台http://blog.csdn.net/luoshixian099/article/details/51908175 关于图的几个概念定义: 连通图:在无向图中,若任意两个顶 ...

  2. 最小生成树之Prime法

    关于最小生成树的概念,在前一篇文章中已经讲到,就不在赘述了.下面介绍Prime算法:         其基本思想为:从一个顶点出发,选择由该顶点出发的最小权值边,并将该边的另一个顶点包含进来,然后找出 ...

  3. 《算法导论》学习总结 — XX.第23章 最小生成树

    一.什么叫最小生成树 一个无向连通图G=(V,E),最小生成树就是联结所有顶点的边的权值和最小时的子图T,此时T无回路且连接所有的顶点,所以它必须是棵树. 二.为什么要研究最小生成树问题 <算法 ...

  4. 最小生成树(prime算法 & kruskal算法)和 最短路径算法(floyd算法 & dijkstra算法)

    一.主要内容: 介绍图论中两大经典问题:最小生成树问题以及最短路径问题,以及给出解决每个问题的两种不同算法. 其中最小生成树问题可参考以下题目: 题目1012:畅通工程 http://ac.jobdu ...

  5. Prime算法 与 Kruskal算法求最小生成树模板

    算法原理参考链接 ==> UESTC算法讲堂——最小生成树 关于两种算法的复杂度分析 ==> http://blog.csdn.net/haskei/article/details/531 ...

  6. 基本数据结构(2)——算法导论(12)

    1. 引言     这一篇博文主要介绍链表(linked list),指针和对象的实现,以及有根树的表示. 2. 链表(linked list) (1) 链表介绍      我们在上一篇中提过,栈与队 ...

  7. MIT算法导论——第二讲.Solving Recurrence

    本栏目(Algorithms)下MIT算法导论专题是个人对网易公开课MIT算法导论的学习心得与笔记.所有内容均来自MIT公开课Introduction to Algorithms中Charles E. ...

  8. MIT算法导论——第四讲.Quicksort

    本栏目(Algorithms)下MIT算法导论专题是个人对网易公开课MIT算法导论的学习心得与笔记.所有内容均来自MIT公开课Introduction to Algorithms中Charles E. ...

  9. 算法导论学习-Dynamic Programming

    转载自:http://blog.csdn.net/speedme/article/details/24231197 1. 什么是动态规划 ------------------------------- ...

随机推荐

  1. Go 语言基础语法

    Go 标记 Go 程序可以由多个标记组成,可以是关键字,标识符,常量,字符串,符号.如以下 GO 语句由 6 个标记组成: fmt.Println("Hello, World!") ...

  2. jQuery AJAX 简介

    AJAX 是与服务器交换数据的技术,它在不重载全部页面的情况下,实现了对部分网页的更新. jQuery AJAX 实例 使用 jQuery AJAX 修改文本内容 尝试一下 » 什么是 AJAX? A ...

  3. 介绍Docker容器

    容器是 Docker 又一核心概念. 简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境.对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用 ...

  4. HA机制下的Hadoop配置

    [版权申明:本文系作者原创,转载请注明出处] 文章出处:http://www.cnblogs.com/sdksdk0/p/5585355.html 作者: 朱培    ID:sdksdk0 ----- ...

  5. [CSDN_Markdown]Markdown基本语法2

    简介 前文 Markdown基本语法 中介绍了Markdown的基本语法,知道那些基本的语法,实际上已经可以写纯文本的博客了.对我们这群写代码的人或者将要写代码的人来说,貌似这些还不够,我们还希望能插 ...

  6. python数据挖掘orange

    http://blog.csdn.net/pipisorry/article/details/52845804 orange的安装 linux下的安装 先安装依赖pyqt4[PyQt教程 - pyth ...

  7. 优化Javascript数据遍历

    问题 M是一个对象的集合,没个对象拥有唯一的字符串类型的Id N是Id的集合. 从M中过滤掉Id不在N中的对象. 假如M有50w个数据,N中可能是0~50w任意的数据. 方案1 使用数组保存Id的集合 ...

  8. Java线程状态

    线程跟人类一样拥有自己的生命周期,一条线程从创建到执行完毕的过程即是线程的生命周期,此过程可能在不同时刻处于不同的状态,线程状态正是这小节的主题,线程到底有多少种状态?不同状态之间是如何转化的? 对于 ...

  9. Intellij IDEA 插件开发之自建插件仓库

    Intellij IDEA 有一个自己的官方的插件仓库,但是当我们的开发的 Intellij IDEA 的插件不能够对外公开时,我们就需要搭建自己的 Intellij IDEA 的插件仓库.前不久我们 ...

  10. Erlang application stop 调用死锁

    Erlang application stop 调用死锁(金庆的专栏)在application行为模块的start()中启动bson应用,在stop()中停止bson,结果application:st ...