【算法分析】
搜索
从每个顶点尝试开始搜索,如果成功开始进行一次搜索,即可标记整个连通分量。成功开始搜索的次数即为连通分量的个数。搜索过程中对这一趟搜索到的顶点做计数,能达到在最大计数即为顶点数量最多的连通分量的顶点数。
【参考代码】
广搜+邻接矩阵
#include <bits/stdc++.h>
using namespace std;
#define N 105
bool edge[N][N];//邻接矩阵
int n, m, num, mx, ct;//num:连通分量数 ct:当前连通分量中的顶点数 mx:最大顶点数
bool vis[N];//vis[i]:顶点i是否已访问过
void init()
{int f, t;cin >> n >> m;for(int i = 1; i <= m; ++i){cin >> f >> t;edge[f][t] = edge[t][f] = true;}
}
void bfs(int v)//从顶点v开始广搜
{queue<int> que;vis[v] = true;ct++;que.push(v);while(!que.empty()){int u = que.front();que.pop();for(int i = 1; i <= n; ++i){if(edge[u][i] && vis[i] == false){ct++;vis[i] = true;que.push(i);}}}
}
int main()
{init();for(int i = 1; i <= n; ++i) {if(vis[i] == false){num++;ct = 0;bfs(i);mx = max(mx, ct);//更新最大顶点数 }}cout << num << ' ' << mx;return 0;
}