题目描述:
该题的目的是要你统计图的连通分支数。
输入:
每个输入文件包含若干行,每行两个整数i,j,表示节点i和j之间存在一条边。
输出:
输出每个图的联通分支数。
样例输入:
1 4
4 3
5 5
样例输出:
2
实现代码:
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
const int MAXN = 1000010;
vector<int> adj[MAXN];
bool vis[MAXN] = {false};
int n = 0;
bool hash1[MAXN] = {false};
void DFS(int nowVisit) {
vis[nowVisit] = true;
for(int i = 0; i < adj[nowVisit].size(); i++) {
if(vis[adj[nowVisit][i]] == false) {
DFS(adj[nowVisit][i]);
}
}
}
int DFSTravel() {
int num = 0;
for(int i = 0; i <= n; i++) {
if(hash1[i] == true && vis[i] == false) {
num++;
DFS(i);
}
}
return num;
}
int main() {
int i, j;
while(scanf("%d%d", &i, &j) != EOF) {
adj[i].push_back(j);
adj[j].push_back(i);
if(n < max(i, j)) {
n = max(i, j);
}
hash1[i] = true;
hash1[j] = true;
}
printf("%d\n", DFSTravel());
return 0;
}