克鲁斯卡尔算法的基本思想
克鲁斯卡尔算法的基本思想:
考虑问题的出发点: 为使生成树上边的权值之和达到最小,则应使生成树中每一条边的权值尽可能地小。
具体做法: 先构造一个只含 n 个顶点的子图 SG,然后从权值最小的边开始,若它的添加不使SG 中产生回路,则在 SG 上加上这条边,如此重复,直至加上 n-1 条边为止。
判断是否产生回路可以用并查集
每次用选择权边最小的边可以用优先队列
#include < iostream >
#include < queue >
using namespace std;
const long Max = 101 ;
struct node
{
long from;
long to;
long cost;
} ;
int set [Max];
priority_queue < node > q;
bool operator < ( const node & a, const node & b)
{
return a.cost > b.cost;
}
long find( long x)
{
long i = x,r = x,j;
while ( set [r] != r)
r = set [r];
while (i != r)
{
j = set [i];
set [i] = r;
i = j;
}
return r;
}
void merge( long a, long b)
{
long x,y;
x = find(a);
y = find(b);
if (x != y)
set [x] = y;
}
long Kruskal()
{
long rs = 0 ,i;
node e;
for (i = 0 ;i < Max;i ++ )
set [i] = i;
while ( ! q.empty())
{
e = q.top();
q.pop();
if (find(e.from) != find(e.to))
{
merge(e.from,e.to);
rs += e.cost;
}
}
return rs;
}
int main()
{
/**/ /*
while(!q.empty()) //清空
{
q.pop();
}
while(m--) //边数
{
scanf("%ld%ld%ld",&e.from,&e.to,&e.cost);
q.push(e);
swap(e.from,e.to);//无向图
q.push(e);
}
rs=Kruskal();
printf("%ld/n",rs);
}
return 0; */
}
克鲁斯卡尔算法的基本思想相关推荐
- 利用克鲁斯卡尔算法求最小生成树
思路:最小生成树即为无向连通图G的一个子图如果是一颗包含G的所有顶点且权最小的树则称为最小生成树.克鲁斯卡尔算法的基本思想是以边为主导地位,始终选择当前可用的(所选的边不能构成回路)最小权值边.所以第 ...
- java克鲁斯卡尔算法_Java语言基于无向有权图实现克鲁斯卡尔算法代码示例
所谓有权图,就是图中的每一条边上都会有相应的一个或一组值.通常情况下,这个值只是一个数字 如:在交通运输网中,边上的权值可能表示的是路程,也可能表示的是运输费用(显然二者都是数字).不过,边上的权值也 ...
- 克鲁斯卡尔算法c语言,Kruskal算法(一)之 C语言详解
最小生成树 在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树. 例如,对于如上图G4所示的连通网可以有多棵权值总和 ...
- KruskalAlgorithm(克鲁斯卡尔算法)
KruskalAlgorithm介绍 克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法. 基本思想:按照权值从小到大的顺序选择 n-1 条边,并保证这 n-1 条边不构成回路 具 ...
- 克鲁斯卡尔算法的基本介绍和实现方法(Java)
克鲁斯卡尔(Kruskal)算法介绍: 克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法. 基本思想:按照权值从小到大的顺序选择n-1条边,并保证这n-1条边不构成回路 具体做法 ...
- 克鲁斯卡尔算法(Kruskal)详解
应用场景-公交站问题 看一个应用场景和问题: 1)某城市新增7个站点(A, B, C, D, E, F, G) ,现在需要修路把7个站点连通 2)各个站点的距离用边线表示(权) ,比如 A – B 距 ...
- 算法6:克鲁斯卡尔算法
目录 1. 应用场景-公交站问题 2. 克鲁斯卡尔算法介绍 3. 克鲁斯卡尔算法图解说明 3.1 克鲁斯卡尔算法图解 3.2 克鲁斯卡尔算法分析 3.3 如何判断是否构成回路 4. 代码实现 1. 应 ...
- 克鲁斯卡尔算法原理及JAVA代码
原理 视频 最小生成树(Kruskal(克鲁斯卡尔)和Prim(普里姆))算法动画演示_哔哩哔哩_bilibili 文章 聊一聊数据结构图的克鲁斯卡尔算法 - 简书 (jianshu.com) 根据前 ...
- 克鲁斯卡尔算法求最小生成树
1.克鲁斯卡尔算法 克鲁斯卡尔算法的核心思想是从边集出发,逐步把代价最小且不与已经加到最小生成树的边集构成回路的边加入到最小生成树的边集中,直到求出构成最小生成树的n-1边(n是图的顶点数).算法的基 ...
最新文章
- 支持向量机python代码_用TensorFlow实现多类支持向量机的示例代码
- 123. Leetcode 72. 编辑距离 (动态规划- 字符串系列)
- asp.net MVC 应用程序的生命周期
- 如何模拟Spring bean(版本2)
- 关于页面之间局部显示的几种方式
- performSelector:withObject:afterDelay: 的用法
- springboot+shiro中自定义session过期时间
- UIControl 详解
- 成本360元的迷你物联网服务器有多香?
- python入门视频教程
- cad怎么画立体图形教学_立体图形怎么画步骤 找CAD图形中心点的方法步骤图
- 2019-03-02 致虚极守静笃 读老子《道德经》有感
- php error allowed,ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
- OpenLayers动画效果显示路线
- AndrOid系统亭子运行,细讲Android系统下的Preference
- 3d打印英语文献_多材料的增材制造(3D打印)
- 什么是tv域名?.tv域名不能实名吗?
- inprivate浏览是什么意思_保护Internet隐私,打开IE浏览器InPrivate浏览默认情况下...
- 微信小程序开发—消息推送
- 终端代理以及git加速
热门文章
- 简单好用的截流软件推荐
- requests爬虫入门
- Python Docker 镜像的选择
- 阅读1.Mobility pattern recognition based prediction for the subway station related bike-sharing trips
- GET http://localhost:8080/***.png net::ERR_BLOCKED_BY_CLIENT 无法加载图片
- 终端安全管理措施三:管理与技术并举
- android 前言中不允许有内容,解决:gradle 前言中不允许有内容
- 西门子200SMART(三)
- Capl之FlexRay脚本id的大致解读
- mysql创建数据表并添加数据的相关命令及操作(二)