其他分享
首页 > 其他分享> > Codeup100000620问题 A: 第一题

Codeup100000620问题 A: 第一题

作者:互联网

题目描述:

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

输入:

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

标签:false,第一,int,true,问题,vis,Codeup100000620,nowVisit,adj
来源: https://blog.csdn.net/Lerbronjames/article/details/119036215