【算法分析】
搜索
从每个顶点尝试开始搜索,如果成功开始进行一次搜索,即可标记整个连通分量。成功开始搜索的次数即为连通分量的个数。搜索过程中对这一趟搜索到的顶点做计数,能达到在最大计数即为顶点数量最多的连通分量的顶点数。
【参考代码】
广搜+邻接矩阵
#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;
}