无标题文章
数据结构实验:连通分量个数
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic
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### 数据结构实验:连通分量个数
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
#include <iostream>
#include <memory.h>
using namespace std;
#define MAX 52
bool visitd[MAX];
typedef struct
{
int vex[MAX];
bool arc[MAX][MAX];
int vNum,eNum;
}Garph;
void CreateGarph(Garph &G){
int k,w;
memset(G.arc,0,sizeof(bool)*MAX*MAX);
memset(visitd,0,sizeof(bool)*MAX);
cin >> G.vNum >> G.eNum;
for(int i=1;i<=G.vNum;i++)
G.vex[i]=i;
for(int i=1;i<=G.eNum;i++){
cin >> k >> w;
G.arc[k][w]=true;
G.arc[w][k]=true;
}
}
void DFS(Garph G,int begin){
visitd[begin]=true;
for(int i=1;i<=G.vNum;i++){
if(G.arc[begin][i]==true && visitd[i]==false){
DFS(G,i);
}
}
}
int main(){
int n;
cin >> n;
while(n--){
Garph G;
CreateGarph(G);
int SG=0;
for(int i=1;i<=G.vNum;i++){
if(!visitd[i]){
SG++;
DFS(G,i);
}
}
cout << SG << endl;
}
return 0;
}
/***************************************************
User name: zhxw150244李政
Result: Accepted
Take time: 0ms
Take Memory: 212KB
Submit time: 2016-11-16 20:30:52
****************************************************/