用并查集求解连通分量问题
来源:互联网 发布:韩国悬疑片 知乎 编辑:程序博客网 时间:2024/06/09 19:57
在求解连通分量问题时,之前是用 搜索的思想,就是如果 用几次搜索能遍历整个图,那么连通分量就是n次-1,不过这种有一个问题就是空间消耗太大,我们必须为程序开一个a[n-1][n-1]的存储空间,当图中的结点个数太多时,我们将发现这种算法将是不可取的。。
于是今天学习了一个新的数据结构就是并查集。。。他的思想是初始化时每个元素都是一个集合。。。之后把具有亲戚关系的元素合并,这样最后还能当得上所谓祖先的元素的元素个数就是有几个家族了,连通分量也就是家族个数减去1了。。这个方法简单而且容易理解是一个不错算法思想,以后要多多学习,今天毕竟才第一次接触、、、下面是用并查集写的求连通分量算法。。
#include<stdio.h>
int set[1003];
int find(int x)
{
int r=x;
while(r!=set[r])
{
r=set[r];
}
return r;
}
void merge(int a,int b)
{
int fx=find(a); //保证每次相连的都是根!!!
int fy=find(b);
if(fx!=fy) set[fx]=fy;
}
int main()
{
int n,m;
while(1)
{
scanf("%d",&n);
if(n==0) break;
scanf("%d",&m);
int i;
for(i=1;i<=n;i++)
set[i]=i;
while(m--)
{
int a,b;
scanf("%d%d",&a,&b);
merge(a,b);
}
int count=-1;//n个集合就有n-1条路;
for(i=1;i<=n;i++)
if(i==set[i])
count++;
printf("%d/n",count);
}
return 0;
}
- 用并查集求解连通分量问题
- 连通分量个数(连通分量_并查集)
- 数据结构实验:连通分量个数(并查集)
- BNU - 4216 - 修路 (并查集判断连通分量)
- LA3644(并查集,维护连通分量的集合)
- 数据结构实验:连通分量个数(并查集)
- HDU 5222 Exploration 并查集+强连通分量
- 连通分量的个数-->并查集的使用
- 连通分量个数(并查集的应用)
- 数据结构实验:连通分量个数——并查集
- 迷宫城堡(并查集,强连通分量)
- hdu 1232 并查集 求连通分量的个数
- sdut 1488 连通分量的个数(并查集)
- 【LeetCode】图的连通分量(并查集)
- 并查集求解问题
- 暑假集训 8.17 数据结构实验:连通分量个数(并查集判断连通分量个数 路径压缩)sdutoj1488
- 并查集--求解等价问题
- dfs--查连通分量
- Visual C++设计超强仿QQ自动伸缩窗口
- squid和dansguadian的安装调试经验
- UITabBarController UINavigationController 相结合代码
- Opencv:IplImage转换为bmp的过程及相关问题
- 排序算法归总
- 用并查集求解连通分量问题
- Php Template Engines
- BPEL事务与补偿机制
- PIDL
- 数字信封
- Visual C++设计超强仿QQ自动伸缩窗口(下)
- opencv关于摄像机标定的一段代码
- FaceBook网站架构软件揭秘
- Java.util.Properties类的使用