Description
求一个图的连通分量
Input
n 顶点数(<=100)
边
Output
连通分量
Sample Input
8
6 3
1 2
2 5
5 4
4 1
8 7
0 0
Sample Output
4
说明:
这道题是一道比较简单的图论题。方法有很多种,要注意输入。
方法一: 深搜+邻接矩阵
这应该说是最简单的一种方法了,要注意判断有没有访问过。
CODE:
#include<iostream>
#include<cstdio>
using namespace std;
int n,x,y,ans,g[10005][10005];
bool v[10005];
int dfs(int i){
int t=1;
v[i]=1;
for (int j=1;j<=n;j++)
if (g[i][j]&&!v[j]) //未访问&连通
t+=dfs(j); //累加
return t;
}
int main()
{
cin>>n>>x>>y;
while(x&&y)
{
g[x][y]=1; //邻接矩阵
g[y][x]=1;
cin>>x>>y;
}
for (int i=1;i<=n;i++)
if (!v[i]) // 判断有没有到过
ans=max(ans,dfs(i));
cout<<ans;
return 0;
}
方法二: 深搜+邻接表
还是用深搜,但用邻接表比用邻接矩阵搜索快一些。
CODE:
#include<iostream>
#include<cstdio>
using namespace std;
struct node{
int y,next;
}e[10005];
in