SDUT 1488 数据结构实验:连通分量个数
2024-08-28 15:28:35
数据结构实验:连通分量个数
Time Limit: 1000MS Memory Limit: 65536KB
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
DQE:
本题水,建立图后对图顶点依次进行深度优先搜索,每个顶点开始前判断是否被访问过,若未被访问则为一个新的连通分量起点。
#include <iostream>
#include <cstdio>
using namespace std; #define MVN 110 typedef struct AdjMatrix
{
int w;
char *info;
}AM; typedef struct MGraph
{
int vex[MVN];
AM arc[MVN][MVN];
int vexn,arcn;
}MG; void creat(MG &G)
{
int i,j,k;
for(i=;i<=G.vexn;i++)
for(j=;j<=G.vexn;j++)
G.arc[i][j].w=;
for(k=;k<=G.arcn;k++)
{
scanf("%d %d",&i,&j);
G.arc[i][j].w=G.arc[j][i].w=;
}
} void DFS(MG &G,bool *f,int i)
{
f[i]=true;
int k;
for(k=;k<=G.vexn;k++)
if(G.arc[i][k].w==&&f[k]==false)
DFS(G,f,k);
} int main()
{
int t;
scanf("%d",&t);
while(t--)
{
MG G;
scanf("%d %d",&G.vexn,&G.arcn);
creat(G);
bool visited[MVN]={false};
int k,count=;
for(k=;k<=G.vexn;k++)
if(!visited[k])
{
count++;
DFS(G,visited,k);
}
printf("%d\n",count);
}
return ;
} /***************************************************
User name: ***
Result: Accepted
Take time: 0ms
Take Memory: 192KB
Submit time: 2016-11-18 20:16:28
****************************************************/
最新文章
- 25、java中观察者模式Observable和Observer
- 雾里看花终隔一层——探析package和import
- 软件工程课后作业——四则运算Ⅲ(C++)
- 生成n对括号的所有合法排列
- SQLite支持的SQL数据操作
- 嵌入式项目数据解决方案之sqlite
- px,em,rem,vw单位在网页和移动端的应用
- Luogu P1494 [国家集训队]小Z的袜子
- ubuntu16.04获取root权限并用root用户登录
- ThinkPHP3.2.3使用分页
- linux2.6.30.4内核移植(7)&mdash;&mdash;插入hello world驱动模块
- 9.5Django
- JMeter中用java修改文件名称
- HDU 4405 Aeroplane chess 期望dp
- curl命令(测试连接命令)
- Spring学习(五)——集成MyBatis
- mysql数据类型字段插入空字符串自动填充为0报错
- nowcoder(牛客网)普及组模拟赛第一场 解题报告
- 标准编译安装(configure make)
- 关于.net DateTime 的一些事儿