博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构实验:连通分量个数 分类: 图论 20...
阅读量:4967 次
发布时间:2019-06-12

本文共 1306 字,大约阅读时间需要 4 分钟。

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

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

 在无向图中,如果从顶点vi到顶点vj有路径,则称vi和vj连通。如果图中任意两个顶点之间都连通,则称该图为连通图,
否则,称该图为非连通图,则其中的极大连通子图称为连通分量,这里所谓的极大是指子图中包含的顶点个数极大。
例如:一个无向图有5个顶点,1-3-5是连通的,2是连通的,4是连通的,则这个无向图有3个连通分量。
 

输入

 第一行是一个整数T,表示有T组测试样例(0 < T <= 50)。每个测试样例开始一行包括两个整数N,M,(0 < N <= 20,0 <= M <= 200)
分别代表N个顶点,和M条边。下面的M行,每行有两个整数u,v,顶点u和顶点v相连。

输出

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

示例输入

23 11 23 23 21 2

示例输出

21
/*使用并查集*/#include #include 
#include
#include
#include
#include
#include
#include
#include
#define INF 0x3f3f3f3f#define ClearAll(A,T) memset(A,T,sizeof(A))using namespace std;const int Max=100;int Pre[Max];int n,m;int Find(int x)//查找{ int i=x,j=x,r; while(Pre[i]!=i) { i=Pre[i]; } while(Pre[j]!=j) { r=Pre[j]; Pre[j]=i; j=r; } return i;}void Insert(int x,int y)//插入{ int Fx=Find(x); int Fy=Find(y); if(Fx!=Fy) { Pre[Fx]=Fy; }}void Clear(){ for(int i=1;i<=n;i++) { Pre[i]=i; }}int main(){ int u,v; int T; scanf("%d",&T); while(T--) { scanf("%d %d",&n,&m); Clear(); for(int i=1;i<=m;i++) { scanf("%d %d",&u,&v); Insert(u,v); } int sum=0; for(int i=1;i<=n;i++) { if(Pre[i]==i) { sum++; } } printf("%d\n",sum); } return 0;}

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/juechen/p/4722048.html

你可能感兴趣的文章
mariadb BINLOG_FORMAT = STATEMENT 异常
查看>>
C3P0 WARN: Establishing SSL connection without server's identity verification is not recommended
查看>>
iPhone在日本最牛,在中国输得最慘
查看>>
动态方法决议 和 消息转发
查看>>
js 基础拓展
查看>>
C#生成随机数
查看>>
Android应用程序与SurfaceFlinger服务的连接过程分析
查看>>
Java回顾之多线程
查看>>
机电行业如何进行信息化建设
查看>>
9、总线
查看>>
Git 笔记 - section 1
查看>>
2018 Multi-University Training Contest 10 - Count
查看>>
HDU6203 ping ping ping
查看>>
《人人都是产品经理》书籍目录
查看>>
如何在git bash中运行mysql
查看>>
OO第三阶段总结
查看>>
构建之法阅读笔记02
查看>>
DataTable和 DataRow的 区别与联系
查看>>
检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败
查看>>
mysql数据库中数据类型
查看>>