Kruskal最小生成树
并查集+kruskal==>MST
效率很低
- #include <iostream>
- using namespace std;
- #define MAX 105 //自己设置最大值
- // father[x]表示x的父节点
- int father[MAX];
- // rank[x]表示x的秩
- int rank[MAX];
- typedef struct
- {
- int i,j;
- int distance;
- } E;
- E edges[MAX*MAX];
- // 初始化
- void Make_Set(int n)
- {
- for(int i=; i<=n; ++i)
- {
- father[i] = i;
- rank[i] = ;
- }
- }
- // 查找
- int Find_Set(int x)
- {
- if(x != father[x])
- return Find_Set(father[x]);
- return x;
- }
- // 合并
- void Union(int x, int y)
- {
- x = Find_Set(x);
- y = Find_Set(y);
- if(x == y) // x,y在同一个集合
- return;
- if(rank[x] > rank[y])
- father[y] = x;
- else if(rank[x] < rank[y])
- father[x] = y;
- else
- {
- rank[y]++;
- father[x] = y;
- }
- }
- bool myfunction ( const E a , const E b )
- {
- return (a.distance<b.distance);
- }
- int main()
- {
- freopen("input.txt","r",stdin);
- int i,j,n,m,u,v;
- int count,Sum;
- while(cin>>n&&n!=)
- {
- count=Sum=;
- for(i=; i<n; i++)
- for(j=; j<n; j++)
- {
- edges[i*n+j].i=i;
- edges[i*n+j].j=j;
- cin>>edges[i*n+j].distance;
- }
- sort(edges,edges+(n*n),myfunction);
- Make_Set(n);
- for(i=; i<n*n; i++)
- {
- if(count==n-) break;
- if(edges[i].i!=edges[i].j&&(Find_Set(edges[i].i)!=Find_Set(edges[i].j)))
- {
- Union(edges[i].i,edges[i].j);
- Sum+=edges[i].distance;
- }
- }
- cout<<Sum<<endl;
- }
- return ;
- }
Kruskal最小生成树的更多相关文章
- Kruskal 最小生成树算法
对于一个给定的连通的无向图 G = (V, E),希望找到一个无回路的子集 T,T 是 E 的子集,它连接了所有的顶点,且其权值之和为最小. 因为 T 无回路且连接所有的顶点,所以它必然是一棵树,称为 ...
- 贪心算法(2)-Kruskal最小生成树
什么是最小生成树? 生成树是相对图来说的,一个图的生成树是一个树并把图的所有顶点连接在一起.一个图可以有许多不同的生成树.一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n ...
- Prim和Kruskal最小生成树
标题: Prim和Kruskal最小生成树时 限: 2000 ms内存限制: 15000 K总时限: 3000 ms描述: 给出一个矩阵,要求以矩阵方式单步输出生成过程.要求先输出Prim生成过程,再 ...
- [算法系列之二十七]Kruskal最小生成树算法
简单介绍 求最小生成树一共同拥有两种算法,一个是就是本文所说的Kruskal算法,还有一个就是Prime算法. 在具体解说Kruskal最小生成树算法之前,让我们先回想一下什么是最小生成树. 我们有一 ...
- poj 2031Building a Space Station(几何判断+Kruskal最小生成树)
/* 最小生成树 + 几何判断 Kruskal 球心之间的距离 - 两个球的半径 < 0 则说明是覆盖的!此时的距离按照0计算 */ #include<iostream> #incl ...
- CSP 地铁修建 Kruskal (最小生成树+并查集)
问题描述 A市有n个交通枢纽,其中1号和n号非常重要,为了加强运输能力,A市决定在1号到n号枢纽间修建一条地铁. 地铁由很多段隧道组成,每段隧道连接两个交通枢纽.经过勘探,有m段隧道作为候选,两个交通 ...
- poj_2349 Kruskal 最小生成树
题目大意 给定N个点的坐标,这N个点之间需要进行通讯.通讯方式可以采用卫星通信或无线通信,若两点之间采用为卫星通信,则两点之间的距离无限制,若采用无线通讯,则两点之间的距离不能大于某个值D. ...
- vijos P1234口袋的天空(Kruskal)(最小生成树)
P1234口袋的天空 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空. 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖. 描述 给你云朵的个数N,再给你M个关系,表示哪些云朵 ...
- POJ 1789 Truck History (Kruskal最小生成树) 模板题
Description Advanced Cargo Movement, Ltd. uses trucks of different types. Some trucks are used for v ...
- 并查集和kruskal最小生成树算法
并查集 先定义 int f[10100];//定义祖先 之后初始化 for(int i=1;i<=n;++i) f[i]=i; //初始化 下面为并查集操作 int find(int x)//i ...
随机推荐
- Sublime Text 2入门指南
Sublime Text 2入门指南 一天在iteye上看到范凯介绍一个开发工具(TextMate ),看下面的评论时看到Sublime Text 2.其实我一直喜欢editplus.百度了一番才 ...
- nyoj71--独木舟上的旅行
描述 进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别.一条独木舟最多只能乘坐两个人,且乘客的总重量不能超过独木舟的最大承载量.我们要尽量减少这次活动中的花销,所以要找出可以安置所有旅 ...
- 采用Service实现本地推送通知
在android的应用层中,涉及到很多应用框架,例如:Service框架,Activity管理机制,Broadcast机制,对话框框架,标题栏框架,状态栏框架,通知机制,ActionBar框架等等. ...
- (三)Qt语言国际化
Vs 2010+ Qt5 实现语言国际化 创建一个工程,cpp代码如下: 1.创建工程 #include "languageinternationalized.h" #includ ...
- Windows phone 中一些实用的控件
一.TextBlock:这个控件其实就是Label控件. <TextBlock x:Name="PageTitle" Text="page name" M ...
- 简单的jQuery获取URL的?后带的参数
var con_name = getQueryString("con_name"); //接收con_name function getQueryString(val ...
- Waring:This LinearLayout layout or its FrameLayout parent is useless; transfer the background attribute to the other view
解决方法请参考: You have a single component (row) vertical linear layout, containing another linear layout. ...
- linux下查看进程内存使用情况
1. top命令--动态查看一个进程的内存使用top -d 1 -p pid [,pid ...] //设置为delay 1s,默认是delay 3s 如果想根据内存使用量进行排序,可以shift ...
- linux文件目录下各文件简介
/bin:存放最常用命令: /boot:启动Linux的核心文件: /dev:设备文件: /etc:存放各种配置文件: /home:用户主目录: /lib:系统最基本的动态链接共享库: /mnt:一般 ...
- python之类私有成员
python类的成员前加双下划线"__", 则被看作"私有"成员. 实例不能简单地通过<instance>.<name>来访问. 但py ...