克鲁斯卡尔总结
来源:互联网 发布:php cookie设置 编辑:程序博客网 时间:2024/04/28 20:47
克鲁斯卡尔算法,是为了用来解决最小生成树问题的。同样功能的还有prim算法。但是由于克鲁斯卡尔的代码短小精悍,运算效率又高。所以经常被用来求最小生成树。
下面我个人对克鲁斯卡尔算法进行下总结。算法的第一步是把所有的边权从小到大进行排列。,接着是对于每条边(u,v)(u,v分别是这条边的两个端点的标号).无非是会出现下边两种情况。
1:u,v在同一个连通分量中,那么链接u,v会产生环。所以不能连接。
2:u,v不子啊同一个联通分量 中。那么u,v的边一定属于最小生成树的。
下边是伪代码
把所有的边排序记第i小的边是 e[i](1<=i<m)//m为边的个数
初始化MST
初始化连通分量。每个节点独立成为一个连通分量。
for(int i=0;i<m;i++)
{
if(e[i] ,u.和v不再同一个联通分量中)
{
把e[i]加入MST
合并u,v所在的连通分量
}
}
例子:点u[i]。v[i]所组成的边的边权是 w[i],r[i] 表示第i大的边的编号。
bool cmp(int i,int j){ return w[i]<w[j];}
int find(x){ return p[x]==x?x:p[x]=find(p[x]);}
int kruskal()
{
int ans=0;
for(i=0;i<n;i++) p[i]=i;
for(i=0;i<m;i++) r[i]=i;
sort(r,r+m,cmp);
for(i=0;i<m;i++)
{
int e=r[i];
int aa=find(u[e]);
int bb=find(v[e]);
if(aa!=bb){
ans+=w[e]; p[aa]=bb;
}
}
return ans;
}
- 克鲁斯卡尔总结
- 克鲁斯卡尔算法
- Kruskal(克鲁斯卡尔)
- 克鲁斯卡尔算法
- 克鲁斯卡尔算法
- 克鲁斯卡尔算法
- 克鲁斯卡尔模版
- 克鲁斯卡尔算法
- 克鲁斯卡尔算法
- 克鲁斯卡尔算法
- 克鲁斯卡尔Kruskal
- 克鲁斯卡尔
- 克鲁斯卡尔
- 克鲁斯卡尔算法
- 克鲁斯卡尔算法
- 克鲁斯卡尔算法
- 克鲁斯卡尔算法
- 克鲁斯卡尔(Kruskal)算法
- 修改表字段类型导致保存时提示索引失效
- A - Balloons
- 回车与换行
- 单链表操作
- Windows版 NPAPI的浏览器插件开发教程
- 克鲁斯卡尔总结
- HDU 3033 I love sneakers! 每组最至少取一个的分组背包
- iphone真机调试
- extjs4.1在eclipse中如何用spket添加sdk.jsb3文件(或关联extjs4类库)
- 有关ubuntu下面怎么安装和设置ftp服务器vsftpd
- E - Maximum Square
- Linux 2.6内核中新的锁机制--RCU
- [SQL-码农]跟大批量的IN 与 NOT IN 分手吧
- 蟹与狐狸