2017-07-26  14:35:49

Prims算法,是一种基于“贪心”的求最小树的算法 ,以每次加入一个邻接边来建立最小树,直到找到N-1个边为止。

规则:以开始时生成树的集合为起始的顶点,然后找出与生成树集合邻接的边中,加权值最小的边来生成树,

为了确定新加入的边不会造成回路,所以每一个新加入的边,只允许有一个顶点在生成树的集合中。

适用:稠密图

用自己的话来讲:Prims算法跟之前的Kruskal算法不大一样,Kruskal算法主要是通过对权值进行从低到高的排序,确定先后加入的边

Prims算法则比较高级,从某一个点出发,寻找到跟这个点最近的这个点,两个组成集合,查找离这两个点最近的几个点,找到最近的点,

将其加入到生成树中,组成集合,一直到找到N-1个边为止;


代码如下:

//这里使用无向图
#include <iostream> using namespace std; const int MAXN = ;
const int INF = ; int n,e;
int w[MAXN][MAXN];
int mincount[MAXN]; //从初始顶点到该顶点的最小权值 void init()
{
int i,j;
int tx,ty;
for(i = ; i<=MAXN; i++)
for(j =; j<MAXN; j++)
w[i][j] = INF; cin >> n >> e; for(i = ; i<=e; i++)
{
cin >> tx >> ty >> w[tx][ty];
w[tx][ty] = w[ty][tx];
}
} void prim(int s) //从标号为s处开始生成树
{
int i,j,cnt = ,min; // cnt 是生成树所有边的权值之和
int k;
for(i = ; i<= n; i++)
mincount[i] = w[s][i]; // 初始化,设w[1][i]是初始点k到i的最小权值,如果没有就设为INF
mincount[s] = ; for(i = ; i < n; i++) //一共有n-1次
{
min = INF;
for(j = ; j <= n; j++)
{
if(mincount[j]!= && mincount[j]<min)
{
min = mincount[j];
k = j; //记录该点
}
mincount[k] = ;//将该点加入到最小生成树中
cnt += min; //将这条边权值加入到最小生成树中 for(j = ;j<=n;j++) //修正初始点到每个点的最小权值
{
if(w[k][j]<mincount[j])
mincount[j] = w[k][j];
}
}
}
cout << cnt << endl;
} int main()
{
init();
prim();
return ;
}

最新文章

  1. &lt;Script&gt;放置位置
  2. ::selection{}
  3. [Android Pro] Android 官方推荐 : DialogFragment 创建对话框
  4. c_test
  5. 关于只针对ie7浏览器的css问题
  6. java中this的用法?
  7. 二分查找or折半查找
  8. POJ 3258
  9. HttpClient 建立http连接,https连接,传输数据文件
  10. 关于LAMP的配置之(虚拟机的安装、创建、配置)
  11. java与xml之间的转换(jaxb)
  12. JAVA中静态修饰符static的学习(初学)
  13. Vue之小入门
  14. Object与Class的区别
  15. tf.assign,tf.assign_add,tf.assign_sub
  16. jquery方法简单记录
  17. Java 基本语法---流程控制
  18. navicat导入csv
  19. 让图片左右缓慢移动的MoveView
  20. ubuntu时钟不显示的解决方法

热门文章

  1. lookcss在深夜23:32开通
  2. 所有版本chromedriver下载
  3. windows程序查看可以行文件依赖库
  4. AsciiDoc Text based document generation
  5. type属性对jq-post在ie、chrome、ff的兼容
  6. Java IO异常处理方式
  7. redis 字符串和集合操作
  8. Keras之函数式(Functional)模型
  9. 006-虚拟机中centos7实现nat静态ip上网
  10. 【网络编程基础】Linux下进程通信方式(共享内存,管道,消息队列,Socket)