最小生成树之Kruskal算法

简介: 笔记

具体做法: 首先构造一个只含n个顶点的森林,然后依权值从小到大从连通网中选择边加入到森林中,并使森林中不产生回路,直至森林变成一棵树为止。


把所有边按权值从小到大排序


遍历每条边 如果这条边的两个顶点一个在树内一个在树外 则将顶点入树


保证了每条边的权值都是最小的


最终得到的树即为最小生成树


并查集的作用是判断两个顶点是否在一个集合(在一个树内)并且合并两个顶点到一棵树


假设排序后第一条边为从顶点i到顶点j权值为v的边,显然这条边是连通图中最短的边,那么可知这条边也是从i到j最短的边

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f3f3f3f3f
#define mod 1000000007
#define IOS ios::sync_with_stdio(false)
#define endl '\n'
using namespace std;
typedef long long ll;
const int maxn = 1e6 + 10;
int n, m;
int f[maxn];
struct Egde {
  int from, to, val;
}edge[maxn];//结构体存边
void init() {
  for (int i = 1;i <= n;++i)f[i] = i;
}
int get_father(int x) {
  return x == f[x] ? x : f[x] = get_father(f[x]);
}
void unite(int a, int b) {
  f[get_father(a)] = get_father(b);
}
bool cmp(Egde a ,Egde b) {
  return a.val < b.val;
}
int main() {
  cin >> n >> m;
  init();
  ll ans = 0;
  for (int i = 1;i <= m;++i) {
    scanf("%d %d %d", &edge[i].from, &edge[i].to, &edge[i].val);
  }
  sort(edge + 1, edge + m + 1, cmp);按权值从小到大排序
  for (int i = 1;i <= m;++i) {
    if (get_father(edge[i].from) != get_father(edge[i].to)) {//如果两个顶点不在同一个集合,则合并
      ans += edge[i].val;
      unite(edge[i].from, edge[i].to);
    }
  }
  printf("%d\n", ans);
  return 0;
}
目录
相关文章
|
6月前
|
算法 索引
class061 最小生成树【算法】
class061 最小生成树【算法】
83 0
|
1月前
|
算法 决策智能
基于prim算法求出网络最小生成树实现网络社团划分和规划
该程序使用MATLAB 2022a版实现路线规划,通过排序节点权值并运用Prim算法生成最小生成树完成网络规划。程序基于TSP问题,采用遗传算法与粒子群优化算法进行路径优化。遗传算法通过编码、选择、交叉及变异操作迭代寻优;粒子群优化算法则通过模拟鸟群觅食行为,更新粒子速度和位置以寻找最优解。
|
4月前
|
存储 传感器 算法
|
5月前
|
算法 Java
Java数据结构与算法:贪心算法之最小生成树
Java数据结构与算法:贪心算法之最小生成树
|
5月前
|
算法 C语言
数据结构与算法——最小生成树问题(什么是最小生成树、Prim算法、Kruskal算法)
数据结构与算法——最小生成树问题(什么是最小生成树、Prim算法、Kruskal算法)
31 0
|
6月前
|
存储 机器学习/深度学习 算法
上机实验三 图的最小生成树算法设计 西安石油大学数据结构
上机实验三 图的最小生成树算法设计 西安石油大学数据结构
84 1
|
6月前
|
人工智能 算法
一些算法的复习(最短路径、最小生成树、dp)
一些算法的复习(最短路径、最小生成树、dp)
|
6月前
|
算法
最小生成树算法
最小生成树算法
|
6月前
|
算法 Java C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-6 算法训练 安慰奶牛 最小生成树
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-6 算法训练 安慰奶牛 最小生成树
46 0
|
19天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
下一篇
无影云桌面