最小生成树(Kruskal )
Kurskal
细节
O(E*logE)(sort)
对边权排序,每次选一条最小的边
模板
INPUT
/*
5 7
1 2 2
1 3 5
1 4 2
2 3 3
3 4 1
2 5 4
3 5 6
*/
// 最小生成树: Kurskal算法+边集存储+并查集(优化)
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 101;
struct Edge{int u, v, w;
} E[maxn]; // 遍集数组存储
int Parent[maxn]; // 并查集void Build(int n) {for(int i = 1; i <= n; i++) Parent[i] = i;
}int Find(int x) { // 查找根节点并压缩路径 if(Parent[x] != x) Parent[x] = Find(Parent[x]);return Parent[x];
} void Union(int x, int y) {Parent[Find(y)] = Find(x);
}bool cmp(const Edge &a, const Edge &b) {return a.w < b.w;
}int main() {freopen("test.in", "r", stdin);int k = 0, MST = 0;int n, m, u, v, val;scanf("%d%d", &n, &m);for(int i = 1; i <= m; i++) {scanf("%d%d%d", &u, &v, &val);E[i].u = u;E[i].v = v;E[i].w = val;} // 存边Build(n); // 初始化并查集 sort(E+1, E+n+1, cmp);for(int i = 1; i <= m; i++) { // 遍历所有边,每次取最小 if(Find(E[i].u) != Find(E[i].v)) {Union(E[i].u, E[i].v);MST += E[i].w; // 边权累加 k++; // 计数器 }if(k == n-1) break;} printf("\n MST=%d\n", MST);return 0;
}
最小生成树(Kruskal )相关推荐
- hdu 1863(最小生成树kruskal)
/*Name: hdu1863畅通工程 Author: Try86Date: 10/04/12 12:43Description: 最小生成树(kruskal) */ #include <cst ...
- HDOJ 1863畅通工程(最小生成树kruskal算法并查集实现)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1863 最小生成树kruskal算法:http://www.zhuoda.org/irini/78592.h ...
- hdu 1162(最小生成树kruskal)
/*Name: 最小生成树(kruskal) Author: Date: 10/04/12 19:17 */#include <math.h> #include <cstdio> ...
- 图的最小生成树-Kruskal算法
问题引入 [问题描述] 编写程序,利用带权无向图的邻接矩阵存储,实现图的最小生成树Kruskal算法. [输入形式] 输入图的顶点序列及图的边的情况.如样例所示.边的输入以输入-1,-1,-1作为结束 ...
- 【老生谈算法】matlab实现Kruskal避圈算法求最小生成树——Kruskal避圈算法
基于MATLAB的Kruskal避圈算法求最小生成树 1.原文下载: 本算法原文如下,有需要的朋友可以点击进行下载 序号 原文(点击下载) 本项目原文 [老生谈算法]基于MATLAB的Kruskal避 ...
- 最小生成树kruskal算法
最小生成树kruskal算法 概述 算法分析 代码 概述 克鲁斯卡尔(Kruskal)(Kruskal)(Kruskal)算法是求连通网的最小生成树的另一种方法.与普里姆(Prim)(Prim)(Pr ...
- 实现最小生成树Kruskal算法(附完整代码)
实现最小生成树Kruskal算法(附完整代码) Kruskal算法是一种常见的计算最小生成树的算法.它的主要思想是将所有的边按照权值从小到大进行排序,并逐个加入到生成树中,如果加入后不会形成环,则保留 ...
- Contest Hunter CH6201 走廊泼水节 最小生成树 Kruskal
$ \rightarrow $ 戳我进CH原题 走廊泼水节 0x60「图论」例题 总时限10 s $ \quad $ 总内存256 MiB 描述 [简化版题意]给定一棵N个节点的树,要求增加若干条边, ...
- 最小生成树kruskal算法并查集版 C语言实现
今天数据结构课讲了最小生成树的Kruskal算法和Prim算法,不过都只是概念,可能是怕他们听不懂吧,反正算法实现一概不讲...囧 下午抱着<算法导论>跑去图书馆看Kruskal算法,发现 ...
- 图论(九)最小生成树-Kruskal算法
前面说过,Kruskal是从最短边着手构建最小生成树的.其基本过程是:先对图中的所有边按照权重值从小到大进行排序,然后着手选取边构建最小生成树.如果直接从小到大按顺序选取,有可能形成了环,所以对环的处 ...
最新文章
- 我的csdnmark
- css高级教程第一章笔记
- [NOI2014]动物园 【kmp】
- char、Varchar、nvarchar、ntext (转)
- 最新综述:作为体现具体化自然语言环境的文本世界
- 建立最简单的repo服务器实例讲解
- 前端学习(1351)模板引擎
- vs2008制作dll笔记
- NLP人机对话与落地案例分享
- 立即释放.net下的com组件
- Python数据结构与算法(3.3)——队列
- vivo手机进入9008模式(vivo x7测试)
- keras-yolo3-master使用记录
- 【第2篇】人工智能(AI)语音测试原理和实践
- PPT - 双屏幕情况下,如何设置 PPT 不在主屏幕显示问题?
- 换个角度来看看C++中的左值、右值、左值引用、右值引用
- TCR历史论文多久能发表?
- Python实现ATM
- java如何进行内存自动释放、垃圾回收?
- 重磅!道翰天琼解密认知智能核心秘密三大核心技术,机器人大脑API平台。