无向图求连通块的个数问题

来源:互联网 发布:美剧下载 知乎 编辑:程序博客网 时间:2024/06/03 00:18
Input

输入的第一行包含两个整数n和m,n是图的顶点数,m是边数。1<=n<=100,0<=m<=10000。

以下m行,每行是一个数对u v,表示存在边(u,v)。顶点编号从1开始。
Output

单独一行输出连通块的数目



#include<iostream>#include<queue>using namespace std;int adjacency[101][101];bool visited[101];int main() {    int i, j, k, m, n, count, num;    cin >> n >> m;    for (i = 1; i <= n; i++) {        visited[i] = false;        for (j = 1; j <= n; j++) {            adjacency[i][j] = 0;        }    }    for (i = 0; i < m; i++) {        cin >> j >> k;        adjacency[j][k] = 1;        adjacency[k][j] = 1;    }    queue<int>q;    count = n;    num = 0;    while (count > 0) {        for (i = 1; i <= n; i++) {            if (!visited[i]) {                q.push(i);                visited[i] = true;                count--;                num++;                break;            }        }        while (!q.empty()) {            j = q.front();            q.pop();            for (k = 1; k <= n; k++) {                if (!visited[k] && adjacency[j][k] == 1) {                    q.push(k);                    visited[k] = true;                    count--;                }            }        }    }    cout << num << endl;}                                 

0 0
原创粉丝点击