数据结构实验:连通分量个数
题目描述
输入
输出
示例输入
2 3 1 1 2 3 2 3 2 1 2
示例输出
2 1
提示
#include <iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
typedef struct arcnode
{
int adj;
}arcnode,adjmatrix[200][200];
typedef struct
{
adjmatrix a;
int vn;
int an;
}MG;
int create(MG &g,int n,int m)//生成邻接矩阵;
{
int i,j;
int v1,v2;
g.vn=n;
g.an=m;
for(i=1;i<=g.vn;i++)
for(j=1;j<=g.vn;j++)
g.a[i][j].adj=0;
for(i=1;i<=g.an;i++)
{
scanf("%d%d",&v1,&v2);
g.a[v1][v2].adj=1;
g.a[v2][v1]=g.a[v1][v2];
}
return 1;
}
int v[110];//标记图的顶点是否访问过;
void dfs(MG &g,int i)//深度优先搜索;
{
int j;//j在函数内部,不然不能回溯;
v[i]=1;
for(j=1;j<=g.vn;j++)
if(g.a[i][j].adj==1&&!v[j])
{
dfs(g,j);
}
}
int i,count;//记录连通分量个数;
void dfs1(MG &g)//统计连通分量的个数
{
//int i;//若不在函数内部不会回溯;
for(i=1;i<=g.vn;i++)
if(!v[i])
{
count++;
dfs(g,i);
}
}
int main()
{
int t;
MG g;
scanf("%d",&t);
while(t--)
{
count=0;
memset(v,0,sizeof(v));//标记数组初始化;
int n,m;
scanf("%d%d",&n,&m);
create(g,n,m);
dfs1(g);
printf("%d\n",count);
}
return 0;
}
#include <cstdio> #define MAX 2000 using namespace std;int pre[MAX+1];void Initialize(int n) { // 初始化各结点的 pre 为自身for(int i=0; i<=n; ++i) { // 相当于初始时每个结点为各自独立的集合pre[i] = i;} }int Find(int a) { // 查找 a 所在集合的根结点 rootint root = a; // root 初始化为其本身while(pre[root] != root) { // 当 root 的上级结点不是其本身root = pre[root]; // 令 root 为它的上级结点,继续查找}while(pre[a] != root) { // 再次遍历,路径压缩int temp = pre[a];pre[a] = root; // 沿途结点直接指向到 roota = temp;}return root; }void Join(int a, int b) { // 将 a, b 结点所在的集合合并int root_a = Find(a); // 查找 a 所在集合的根结点int root_b = Find(b); // 查找 b 所在集合的根结点if(root_a != root_b) { // 如果 a, b 不在同一集合,则合并if(root_a > root_b) // 根结点下标大的集合并入下标小的集合pre[root_a] = root_b;else pre[root_b] = root_a;} }int Count(int n) { // 统计不相交集合的个数int cnt = 0; // 计数变量for(int i=1; i<=n; ++i) {int root = Find(i); // 找到一个集合if(root) { // 如果是第一次找到此集合cnt++; // 计数pre[root] = 0; // 此根节点置0,防止重复}}return cnt; }int main(int argc, char const *argv[]) {int t, n, m, u, v;scanf("%d", &t);while(t--) {scanf("%d %d", &n, &m);Initialize(n);while(m--) {scanf("%d %d", &u, &v);Join(u, v);}printf("%d\n", Count(n));}return 0; }
数据结构实验:连通分量个数相关推荐
- 数据结构实验之链表五:单链表的拆分-sdut
数据结构实验之链表五:单链表的拆分 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 输入N个 ...
- SDUT OJ 数据结构实验之排序一:一趟快排
数据结构实验之排序一:一趟快排 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descrip ...
- SDUT-2449_数据结构实验之栈与队列十:走迷宫
数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起 ...
- sdut 2135 数据结构实验之队列一:排队买饭
数据结构实验之队列一:排队买饭 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descriptio ...
- sdut 3333 数据结构实验之栈与队列六:下一较大值(二)
数据结构实验之栈与队列六:下一较大值(二) Time Limit: 150MS Memory Limit: 8000KB Submit Statistic Discuss Problem Descri ...
- sdut-3332 数据结构实验之栈与队列五:下一较大值(一)
数据结构实验之栈与队列五:下一较大值(一) Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Desc ...
- SDUT_2122 数据结构实验之链表七:单链表中重复元素的删除
提交代码 数据结构实验之链表七:单链表中重复元素的删除 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Proble ...
- SDUT—2054数据结构实验之链表九:双向链表 (基本建立)
点击打开链接 数据结构实验之链表九:双向链表 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Des ...
- SDUT_2121数据结构实验之链表六:有序链表的建立 (对建立的单项链表结构进行排序)
点击打开链接 数据结构实验之链表六:有序链表的建立 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem ...
最新文章
- nowcoder119E A Simple Problem
- android studio编译JNI问题ninja: fatal: couldn‘t open nul的解决
- volatile用法
- android 查询wifi信息的类,Android 获取wifi信息
- angular监听输入框值的变化_如何检测Angular中@Input()值何时发生变化?
- SpringBoot项目读取json配置文件
- 计算机控制机器人运动的原理,工业机器人控制系统的基本原理
- 计算机显示器出现黑屏分析
- 百度小程序怎么添加到主屏幕将百度小程序放到手机桌面?
- 上采样,重采样和下采样,降采样
- mybatis-plus使用注意事项
- CSP CCF: 201909-3 字符画) (C++)
- mac机c4d更改语言,Win/Mac版:C4D R18 三维软件 Cinema 4D C4D R18 正式完整版 + 中文/英文注册机版...
- 新硬盘怎么装系统分区?
- mpc 安全多方计算协议_一文揭秘跨链、密钥管理、合约隐私背后的技术, 你不可不知的安全多方计算(MPC)...
- 海外IT工程师工作福利揭秘
- MES系统供应商评估报告-- Gartner出品
- html:对于拼多多网页的简单制作
- 云原生尝试——Docker部署node项目
- 求职应聘时面试常见问题1
热门文章
- php 分布式数据库查询,分布式数据库
- python的作者为什么要创造python_为什么要学习Python?老男孩Python开发
- oracle数据库全数据库名,Oracle数据库中的 数据库域名、数据库名、全局数据库名、SID、数据库实例名、服务名 解释...
- jdba访问mysql_mysql连接出现问题记录
- can通道采样频率_CAN采样点设置为多少合适?设置不对会咋样?
- golang atomic load 性能_设计模式之Golang单例模式
- vfp操作excel排序_中招计算机信息技术考试训练|Excel操作题一|排序和筛选
- php按数字分页类,PHP简单实现数字分页功能示例
- PPT下载下来是php,用php下载jpg,doc,ppt文件已损坏
- java 开发帮助_java的简单编程请帮助