题目描述
求一个图的连通分量
Input
n 顶点数(<=100)
边(以0 0作为结束标志)
Output
连通分量
(强连通图的连通分量为其本身。如果为非连通图,则连通分量为该图的最大连通子图。)
分析
建一个100*100的布尔矩阵,b[x,y]=true表示x与y连通。同时还要记录该点是否被遍历过
然后遍历时将队尾最大值记录一下就好了~
#include <iostream>
#include <cstdio>
using namespace std;
int n,x,y,state[101],i,m;
bool b[101],f[101][101];
void bfs(int begin)
{
int h=0,t=1,i;
state[1]=begin;
b[begin]=true;
do
{
h++;
for (i=1;i<=n;i++)
if (f[state[h]][i]&&!b[i])
{
t++;
state[t]=i;
b[i]=true;
}
}
while (h<=t);
if (t>m) m=t;
}
int main()
{
scanf("%d",&n);
while (1)
{
scanf("%d%d",&x,&y);
if (x==0&&y==0) break;
f[x][y]=true;
f[y][x]=true;
}
for (i=1;i<=n;i++) bfs(i);
printf("%d",m);
return 0;
}
——
秋名山上行人稀
常有车手赛高低
如今车道仍然在
不见当年老司机
所以给我点点赞呗~