数据结构实验:连通分量个数

Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic Discuss

Problem Description

在无向图中,如果从顶点vi到顶点vj有路径,则称vi和vj连通。如果图中任意两个顶点之间都连通,则称该图为连通图,

否则,称该图为非连通图,则其中的极大连通子图称为连通分量,这里所谓的极大是指子图中包含的顶点个数极大。
例如:一个无向图有5个顶点,1-3-5是连通的,2是连通的,4是连通的,则这个无向图有3个连通分量。

Input

第一行是一个整数T,表示有T组测试样例(0 < T <= 50)。每个测试样例开始一行包括两个整数N,M,(0 < N <= 20,0 <= M <= 200)

分别代表N个顶点,和M条边。下面的M行,每行有两个整数u,v,顶点u和顶点v相连。

Output

每行一个整数,连通分量个数。

Example Input

2
3 1
1 2
3 2
3 2
1 2

Example Output

2
1

Hint

Author

#include <bits/stdc++.h>>
using namespace std;
int pre[25];
int find(int i)
{int r=i;while(pre[r]!=r)r=pre[r];int j;while(i!=r){j=pre[i];pre[i]=r;i=j;}return r;
}
void join(int a,int b)
{if(find(a)!=find(b))pre[find(a)]=find(b);
}
int main()
{int t,m,n,p,q;int a[25];cin>>t;while(t--){int ans=0;cin>>n>>m;for(int i=0;i<=n;++i)pre[i]=i;memset(a,0,sizeof(a));for(int i=0;i<m;++i){cin>>p>>q;join(p,q);}for(int i=0;i<=n;++i)a[find(i)]=1;for(int i=1;i<=n;++i)//要从1开始if(a[i])ans++;cout<<ans<<endl;}
}

网上的DFS可以过的:

#include<iostream>
#include<string.h>
using namespace std;
typedef struct graph
{int ma[21][21];int v,a;
}mg;
int vis[21];
void dfs(mg &g,int n)
{vis[n]=1;for(int i=1;i<=g.v;i++){if(!vis[i]&&g.ma[n][i])dfs(g,i);}
}
int main()
{int t,m,n,a,b,count;cin>>t;while(t--){mg g;cin>>n>>m;g.v=n;g.a=m;memset(g.ma,0,sizeof(g.ma));memset(vis,0,sizeof(vis));for(int i=0;i<m;i++){cin>>a>>b;g.ma[a][b]=g.ma[b][a]=1;}count=0;//连通分量的个数//没有被访问过的顶点,做一次深搜就能找到一个新的连通分量for(int i=1;i<=n;i++){if(!vis[i]){dfs(g,i);count++;}}cout<<count<<endl;}return 0;
}

sdut 1488 连通分量的个数(并查集)相关推荐

  1. 统计有几个连通分量--hdu 1213 并查集

    点击打开链接 题意:T组测试用例,输入n,m,输入m对数x,y(x不等于y),表示x,y在同一个连通分量里面.输出连通分量的个数. 连通分量的个数: 1.可以求出一共有多少个根节点(即fa[i]==- ...

  2. [杂记]算法: 并查集

    0. 引言 我们考虑如何计算一个图连通分量的个数. 假定简单无向图 G G G有两个连通分量(子图) G 1 , G 2 G_1, G_2 G1​,G2​, 如下图所示: 一个很自然的想法是, 要想求 ...

  3. C++用并查集Disjoint union实现connected component连通分量(附完整源码)

    C++用并查集Disjoint union实现connected component连通分量 C++用并查集Disjoint union实现connected component连通分量完整源码(定义 ...

  4. 每天都刷朋友圈,那你知道并查集吗?

    微信大概是我们每天必须接触的一个APP之一,公交上.地铁上,异或工作休息时,我们都忍不住刷刷朋友圈,看看一些点赞之交的朋友当天又经历了什么.相较于QQ,微信的一个特点之一就是:除非好友的好友也是你的好 ...

  5. 高级数据结构与算法 | 并查集(Union-Find)

    文章目录 并查集的原理 并查集的实现 例题 并查集的原理 在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合.开始时,每个元素自成一个 单元素集合,然后按一定的规律将归于同一组元素的集合合并 ...

  6. Leetcode——唯唯诺诺对并查集的初次相见

    基本概念 并查集是一种数据结构 并查集这三个字,一个字代表一个意思. 并(Union),代表合并 查(Find),代表查找 集(Set),代表这是一个以字典为基础的数据结构,它的基本功能是合并集合中的 ...

  7. 【LeetCode】﹝并查集ி﹞连通分量个数(套用模板一直爽)

    [LeetCode]﹝并查集ி﹞连通分量个数(套用模板一直爽) 文章目录 [LeetCode]﹝并查集ி﹞连通分量个数(套用模板一直爽) 模板(使用路径压缩的加权quick-union算法) 连通网络 ...

  8. LintCode 434. 岛屿的个数II(并查集)

    文章目录 1. 题目 2. 解题 1. 题目 给定 n, m, 分别代表一个二维矩阵的行数和列数, 并给定一个大小为 k 的二元数组A. 初始二维矩阵全0. 二元数组A内的k个元素代表k次操作, 设第 ...

  9. 使用并查集实现查找无向图的连通分量和求解有向图的强连通分量

    目录 1.无向图的连通分量 2.求解连通分量算法的实现 3.有向图的强连通分量 4.求解有向图的强连通分量 使用C语言实现并查集 有向图和无向图 1.无向图的连通分量 无向图G中,如果存在从顶点v1到 ...

最新文章

  1. VMware Workstation Pro 共享文件夾
  2. ETH网络要爆炸,未来Token的最佳选择注定是BCH
  3. predicate java_java代码之美(13)--- Predicate详解
  4. ​Spring事务的传播行为案例分析
  5. python fact函数_第5天:Python 函数
  6. mysql联合索引与Where子句优化浅析
  7. 《dp补卡——子序列问题》
  8. 反恐精英起源服务器文件在哪,反恐精英:起源人物模型放哪里
  9. Kubernetes-Pod(三)
  10. 技术研究院006---B站自用的微服务框架——Kratos
  11. CME比特币期货去年促成超1100万枚比特币交易量
  12. 《HTML5和CSS3快速参考》——第1章 走进HTML51.1 概述
  13. Ubuntu 16.04中的Dock的应用顺序调整
  14. matlab数字信号处理与应用 张德丰,MATLAB数字信号处理与应用
  15. 20200720 PLECS培训教程笔记
  16. GlobalMapper小白学习日记
  17. 浙大 PAT 甲级 1075 PAT Judge
  18. 五菱“神车”再添一员,小型电动车迎来“均值回归”?
  19. android获取连接wifi名称,Android开发:获取手机当前连接的WiFi名称
  20. Android热修复学习之旅开篇——热修复概述

热门文章

  1. 为什么用C而不用C++
  2. android Timer与TimerTask的相关操作
  3. 手持机连不上信道设置为13的AP
  4. 技术团队新官上任之中层篇
  5. VS2005工程由Pocket PC 2003 SDK转为WINCE6.0 SDK的问题
  6. 项目管理概述学习记录(二)
  7. 前端架构之移动端混合架构(hybrid)
  8. 84. ExtJS下页面显示中文乱码问题
  9. (个人)Zookeeper集群环境部署
  10. 阿里内核月报2014年4月