问题 A: 第一题

题目描述

该题的目的是要你统计图的连通分支数。

输入

每个输入文件包含若干行,每行两个整数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;
}

猜你喜欢

转载自blog.csdn.net/Morizunzhu/article/details/81545612