Kruskal算法和Prim算法一样,都是求最小生成树问题的流行算法。

算法思想:

  Kruskal算法按照边的权值的顺序从小到大查看一遍,如果不产生圈或者重边,就把当前这条边加入到生成树中。

算法的正确性:

  由于每次加入的都是权值最小的可以加的边,所以生成的一定是最小生成树。

  (可能描述的不太准确,但是就是这个意思)

时间复杂度O(E*log(V)) (E是边数,V是顶点数)。

模板代码:

#include <iostream>
#include <algorithm>
#include <stdio.h>
using namespace std;
typedef long long ll;
//点的数量
#define MAX_N 1000
//边的数量
#define MAX_E 1000struct edge{int u,v,cost;
}; bool cmp(const edge &e1,const edge& e2){return e1.cost < e2.cost;
}edge es[MAX_E];   //边集
int V,E;            //顶点和边的数量 int par[MAX_N]; //par[i]表示i节点的父节点
int rank[MAX_N]; // 树的高度 //初始化n个元素
void init(int n){for(int i = 0;i < n; i++){par[i] = i;rank[i] = 0;}
} //查询包含x节点的树的根
int find(int x){if(par[x] == x) return x;else return par[x] = find(par[x]);
}//合并 x和y所属的集合
void unite(int x,int y){x = find(x);y = find(y);if(x == y) return;if(rank[x] < rank[y]){par[x] = y; }else{par[y] = x;if(rank[x] == rank[y]) rank[x]++;}
}//判断x和y是否属于同一个集合
bool same(int x,int y){return find(x) == find(y);
}//不断加入能加入的权值最小的边
int kruskal(){sort(es,es+E,cmp); //按权值从小到大排序边 init(V);            //初始化并查集 int res = 0;   //生成树总权值 for(int i = 0;i < E ; i++){edge e = es[i];if(!same(e.u, e.v)){unite(e.u,e.v);res += e.cost;}}return res;
}int main(){return 0;
} 

【算法】Kruskal算法(解决最小生成树问题) 含代码实现相关推荐

  1. 使用贪心算法解决最小生成树问题。

    使用贪心算法解决最小生成树问题. #include<iostream> #include<algorithm> using namespace std; const int M ...

  2. 生成树的概念,最小生成树Prim算法 Kruskal算法

    求解最小生成树可以用Prim算法 Kruskal算法

  3. 普利姆算法和克鲁斯卡尔算法解决最小生成树问题

    什么是最小生成树? 最小生成树(Minimum Cost Spanning Tree),简称MST. 最小生成树要求图是连通图.连通图指图中任意两个顶点都有路径相通,通常指无向图.理论上如果图是有向. ...

  4. K-means 聚类算法的应用案例实战(含代码和图示)

    1.算法优缺点 优点:容易实现 缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢 使用数据类型:数值型数据 2.算法思想 k-means算法实际上就是通过计算不同样本间的距离来判断他们的相 近关系 ...

  5. 【数据结构】最小生成树 Prim算法 Kruskal算法

    最小生成树应用场景: 假设以下场景,有一块木板,板上钉上一些钉子,这些钉子可以由一些细绳连接起来.假设每个钉子可以通过一根或者多根细绳连接起来,那么一定存在这样得情况,即用最少的细绳把所有的钉子连接起 ...

  6. 最小生成树:Prim算法 /Kruskal算法(待深入复习理解)

    目录 1.各种概念和性质 2.prim算法 3.Kruskal算法 4.两种算法比较 1.各种概念和性质 无向图的生成树 最小生成树 构造最小生成树(利用MST性质) 2.prim算法 算法思想 算法 ...

  7. hdu 1233 还是畅通工程 最小生成树(prim算法 + kruskal算法)

    还是畅通工程                                                                            Time Limit: 4000/2 ...

  8. 最小生成树 | Prim算法 Kruskal算法 |C语言

    一.Prim算法 MST收集的是顶点: 这里的dist[]是指结点V到最小生成树的最小距离: 当dist[V] = 0 时,表明结点V被收录到最小生成树中, 如果dist[W] != 0,表明结点W还 ...

  9. 最小生成树之 Prim算法 Kruskal算法

    1 描述 问题:修建一个连接各个小区与煤气供应站点之间的管道,使得造价成本最低,即构造一颗最小生成树.但是如何求解? 对应模型:树结构,生成树,最小生成树 2 prim算法实例 基本思想:在满足如下条 ...

最新文章

  1. 这几天研究了一下JDK14,发现它处理NPE的方式,真香!
  2. mysql 解除安全模式
  3. 机房收费--组合查询
  4. Spring boot应用如何支持https
  5. python 字典查询比列表快_为什么python字典要比列表快以及哈希查找解释。
  6. angularjs路由_AngularJS路由示例– ngRoute,$ routeProvider
  7. 117 Populating Next Right Pointers in Each Node II
  8. jQuery - 选择器(五)
  9. java 下载 名乱码_java下载文件中文文件名乱码
  10. 数学建模matlab案例,数学建模案例matlab实用程序百例
  11. 菲律宾php是啥,投资菲律宾马尼拉房产的本质是什么?
  12. 华为软件测试笔试真题之变态逻辑推理题【二】华为爆火面试题
  13. WAMP/WNMP单独安装
  14. ArcGIS API for JavaScript实现坐标定位
  15. js 判断企业微信打开
  16. 关于物联网卡,您想了解的都在这里
  17. 7.3 pgfplots点集
  18. 曙光服务器怎么进入bios_在安装电脑系统进入bios界面时应该如何设置?怎么在bios界面把硬盘格式化?求电脑高手帮个忙!谢谢了… 曙光电脑进入bios...
  19. 搜狐邮箱怎样开启imap服务器,搜狐企业邮箱iPhone如何设置?
  20. 行业大咖齐聚鹏城 八大峰会打造2021深圳国际全触与显示展“新名片”

热门文章

  1. linux后缀为tar.xz,xz后缀名文件解压方法
  2. 查询手机号段对应地区编码_想知道海关统计数据吗?这里有详细的查询教程
  3. 后缀数组求最长重复子串
  4. C#与C++ DLL的交互
  5. 参数签名ascii码排序的坑
  6. MFC中快速应用OpenCV教程
  7. iOS 深拷贝和浅拷贝
  8. python学习四(处理数据)
  9. 学校的体育设施预订服务系统
  10. 职高中专的模块化课程设计难点