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;
}

上一篇:[llvm] LLVM 核心类简明示例 : llvm::Value && llvm::Type && llvm::Constant


下一篇:图的dfs+string的输入只能用cin