图论浅析--最小生成树之Kruskal
2015-08-03 12:02
288 查看
Kruskal
算法思想
将带权图G的所有边按权值从小到大排序;图G’初始为空;
从小到大取边;
若加入边(x,y),G’中有环,则放弃此边,继续取边;
将边(x,y)加入图G’中,直至加入n-1条边。
过程演示
Code
struct Edge { int u,v,w; }e[NUM]; int n; int f[NUM];//并查集使用 int tol;//边数,加边前赋值为0 bool cmp(Edge a,Edge b){return a.w<b.w;} int find(int x) { if(f[x]==-1) return x; else return f[x]=find(f[x]); } void addedge(int u,int v,int w) { e[tol].u=u; e[tol].v=v; e[tol++].w=w; } int Kruskal() { memset(f,-1,sizeof(f)); int cnt=0;//计算加入的边数 int ans=0; sort(e,e+tol,cmp); for(int i=0; i<tol; i++) { int u=e[i].u; int v=e[i].v; int w=e[i].w; int t1=find(u); int t2=find(v); if(t1!=t2) { ans+=w; f[t1]=t2; cnt++; } if(cnt==n-1)break; } if(cnt<n-1) return -1;//不连通 else return ans; }
相关文章推荐
- 图论浅析--最小生成树之Kruskal
- 背景附件 background-attachment
- 1002 归并排序
- java连接mysql 连接数太多
- MFC学习
- java笔记(一)[static和final常量&String.format()问题&Array类&finalize方法及内存回收]
- 填补新版SDWebImage使用
- PHP使用CURL详解
- NOI2011 阿狸的打字机
- 分布式程序设计
- hadoop权威指南(第四版)要点翻译(2)——Chapter 1. Meet Hadoop
- 完美退出应用程序
- CentOS 7
- Redis 2种持久化模式的缺陷
- android 占位符使用
- HDU 4990 Reading comprehension(递推+快速幂 或 矩阵快速幂)
- DXT纹理压缩
- http协议的理解
- poj2253Frogger 最短路水题
- DOM 中 Property 和 Attribute 的区别