题目描述
该题的目的是要你统计图的连通分支数。
输入
每个输入文件包含若干行,每行两个整数i,j,表示节点i和j之间存在一条边。
输出
输出每个图的联通分支数。
样例输入
1 4 4 3 5 5
样例输出
2
#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
const int MAX_SIZE = 1000010;
vector<int> linkList[MAX_SIZE];
bool visit[MAX_SIZE] = {false};
void dfs(int now)
{
visit[now] = true;
for (int i = 0; i < linkList[now].size(); i++)
{
if (!visit[linkList[now][i]])
{
dfs(linkList[now][i]);
}
}
}
int main()
{
int i, j, res = 0, maxi = 0;
while (cin >> i >> j)
{
if (i != j)
{
linkList[i].push_back(j);
linkList[j].push_back(i);
}
else
{
linkList[i].push_back(j);
}
maxi = max(i, maxi);
maxi = max(j, maxi);
}
for (i = 1; i <= maxi; i++)
{
if (!visit[i] && linkList[i].size())
{
++res;
dfs(i);
}
}
cout << res << endl;
return 0;
}