MST_kruskal
kruskal是求最小生成树的算法。
首先,kruskal就是把所有边按照权值从小到大的顺序排列,这一步可以直接使用sort,然后依次考查每一条边,设w=(u,v)表示从u到v的一条边的权值为w,则有:
情况1:u和v在同一个连通分量中,则加入(u,v)后会形成环,因此不能选择。
情况2:u和v不在同一个连通分量中,那么加入(u,v)一定是最优的,为什么呢?这个可以用反证法证明一下,在这里也就不多说啦。
这里有一份kruskal的实现代码(这份代码来自kuangbin神牛,final爷哦,大家可以去他博客学习www.kuangbin.net):
代码纯手打,所以没有语法高亮等,哈哈。
const int MAXN=110;//最大节点数
const int MAXM=1e6;//最大边数
struct Edge
{
int u,v,w;
}edge[MAXM];//用于储存边的信息,节点u和v之间的权值为w,u,v之间可以有多条边,不影响的
int father[MAXN];//并查集的应用,用于判断2个节点是否在同一个连通变量中
int tot;//记得初始化为0或1
void addedge(int u,int v,int w)
{
edge[tot].u=u;
edge[tot].v=v;
edge[tot++].w=w;
}
int find_set(int x)
{
if(father[x]==-1)
return x;
else
return father[x]=find_set(father[x]);
}//路径压缩
bool cmp(Edge x,Edge y)
{
return x.w<y.w;
}
int kruskal(int n)//传入点数,返回最小权值,若不连通,返回-1
{
sort(edge,edge+tot,cmp);
memset(father,-1,sizeof(father));
int ans=0;
int num=0;
for(int i=0;i<tot;i++)//我就有一次错写为i<n,囧,这里是从边是0~tot-1,随机应变咯
{
int u=edge[i].u;
int v=edge[i].v;
int w=edge[i].w;
int fau=find_set(father[u]);
int fav=find_set(father[v]);
if(fau!=fav)
{
ans+=w;
num++;
father[fau]=fav;//不是father[u]=v;
}
if(num==n-1)
break;
}
if(num<n-1)
return -1;
else
return ans;
}
就到这里啦,我会继续补充的。
MST_kruskal的更多相关文章
- NOIP常见模板集合
Preface 这篇博客记录的是我联赛前虽然只有两天了的打板子记录. 只求真的能给我起到些作用吧,一般按照难度排序. 而且从这篇博客开始我会用H3的标题代替H4 为了节约篇幅,以下的代码一般均以cla ...
- Connect the Cities(hdu3371)并查集(附测试数据)
Connect the Cities Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- 最小生成数 克鲁斯卡尔 普里姆 matlab
克鲁斯卡尔: function T=MST_Kruskal(G) n=0; if isfield(G,'w') && ~isempty(G.w) && size(G.w ...
- Codeforces 333E Summer Earnings(bitset)
题目链接 Summer Earnings 类似MST_Kruskal的做法,连边后sort. 然后对于每条边,依次处理下来,当发现存在三角形时即停止.(具体细节见代码) 答案即为发现三角形时当前所在边 ...
- 最小生成树的java实现
文章目录 一.概念 二.算法 2.1 Prim算法 2.2 Kruskal算法 笔记来源:中国大学MOOC王道考研 一.概念 连通图:图中任意两点都是连通的,那么图被称作连通图 生成树:连通图包含全部 ...
随机推荐
- pthread_join和pthread_detach的用法(转)
一:关于join join join是三种同步线程的方式之一.另外两种分别是互斥锁(mutex)和条件变量(condition variable). 调用pthread_join()将阻塞自己,一直到 ...
- URAL 1176 Hyperchannels(欧拉回路路径)
Hyperchannels Time limit: 1.0 secondMemory limit: 64 MB The Galaxy Empire consists of N planets. Hyp ...
- 课堂所讲整理:Set和Map
Set相关知识: package org.hanqi.array; import java.util.*; public class Test2 { public static void main(S ...
- Python爬虫学习笔记——豆瓣登陆(三)
之前是不会想到登陆一个豆瓣会需要写三次博客,修改三次代码的. 本来昨天上午之前的代码用的挺好的,下午时候,我重新注册了一个号,怕豆瓣大号被封,想用小号爬,然后就开始出问题了,发现无法模拟登陆豆瓣了,开 ...
- 如果将彩色图像和灰度图像一起放进 CNN 中去,会是什么结果?
如果将彩色图像和灰度图像一起放进 CNN 中去,会是什么结果? 今天,坑爹的实验,我处理 SUN397 的时候,忘记去掉灰度图了,结果,利用微调后的 model 提取 feature,悲剧的发现,无论 ...
- win7下安装配置tomcat,java运行环境
转 http://www.cnblogs.com/pannysp/archive/2012/03/07/2383364.html 1.下载JDK,安装 官网下载地址:http://java.sun.c ...
- vs2010 无法创建 *.edmx(Entity Frame Work) 文件的问题
当你安装了VS2010或者已经安装了EntityFramework41RC.exe之后发现依然在Add New Item时无法找到ADO.NET Entity Model,有可能是你创建的不是netf ...
- 螺旋矩阵 noip2014普及组
本题可以直接模拟填数字,也可以直接计算结果. 代码一:(这个代码,缺陷在于数组太大,浪费内存啊.另外,循环次数也不少.总之,时间空间的消耗都不小.) /*======================= ...
- win7下MariaDB10.0的my.ini配置文件的位置
msi版本的,安装后在安装目录下的\data\my.ini 常用的配置选项: 1.修改默认的存储引擎 在配置文件my.ini(linxu下为my.cnf) 中的 [mysqld] 下面加入defaul ...
- Oracle视图详解
转载自:http://blog.itpub.net/29785807/viewspace-1270120/ 一. 视图的定义 视图(view),也称虚表, 不占用物理空间,这个也是相对概念,因为视图本 ...