-Description -
求一个图的连通分量
-Input-
n 顶点数(<=100)
边
-Output-
连通分量(例子为4)
方法:
(就当是摸鱼吧)
- DFS+邻接矩阵
- DFS+邻接表
- BFS+邻接矩阵+STL(链表)
- BFS+邻接表+STL
1.DFS+邻接矩阵
很快就打完了(最简单了)
#include<cstdio>
using namespace std;
int ans=0,n,l;
bool f[101][101],B[101];
void dfs(int k){
//搜
++l;
for(int i=1;i<=n;++i) //循环每个节点
if(f[k][i]&&k!=i&&B[i]==false){
//如果他们连通且没走过
B[i]=true; //赋值为走过
dfs(i); //继续搜
}
}
int main(){
int x,y;
scanf("%d%d%d",&n,&x,&y);
while(x&&y){
f[x][y]=1; //x可以通往y
f[y][x]=1; //y可以通往x
scanf("%d%d",&x,&y); //输入
}
for(int i=1;i<=n;++i) //循环找没走过的点
if(B[i]==false)
{
//因为此点走过,说明它和别的点组成的连通图被搜过
B[i]=true; l=0; //初始
dfs(i); //搜