求连通分量
题目
求一个图的连通分量 此题为无向图
输入
n 顶点数 ( n <= 100 )
点与点之间的边
输出
最大的连通分量
样例
input
8
6 3
1 2
2 5
5 4
4 1
8 7
0 0
output
4
样例解释
一共有 8 个点
6 与 3 相连,1 与 2 相连,2 与 5 相连,5 与 4 相连,4 与 1 相连,8 与 7 相连
如图所示
最大的连通分量就是 1 => 2 => 5 => 4
输出 4
解题思路
分别用了广搜和深搜
还用了个叫 queue 的东东,貌似用于队列
花了我 1 个多小时,太过分了,emmmm
代码
深搜 & 邻接矩阵
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
int n,x,y,ans,maxn;
int p[110],a[110][110];
void dfs(int dep)
{
for (int i=1;i<=n;i++)
if (a[dep][i]==1&&p[i]==0) //是否相连并没有走过
{
p[i]=1;
ans++;
dfs(i);
}
}
int main()
{
scanf("%d",&n);
scanf("%d%d",&x,&y);
while (x!=0&&y!=0)
{
a[x][y]=1;
a[y][x]=1; //构建邻接矩阵,无向图对称
scanf("%d%d",&x,&y);
}
for (int i=1;i<=n;i++)
if (p[i]==0)
{
ans=1;
p[i]=1;
dfs(i); //枚举每一个连通分量
maxn=max(maxn,ans);
}
cout