2021.5.23
DFS连通块个数计数
题目:一张图用dfs遍历,判断有多少连通块
解题思路:
每个点都进行作为起始点尝试,进入过给1将与这个点相连的其他点当做第二起始点进行递归,直到同块所有点的访问为1,遇到起始点为0时代表找到一个新连通块
#include<bits/stdc++.h>
using namespace std;
int n,m,ans=0;
vector<int>e[100];
int bk[7];
void dfs(int d)
{
if(bk[d]==1)return;
bk[d]=1;
for(auto g:e[d])
{
if(g==1)continue;
dfs(g);
}
}
int main()
{
cin>>n>>m;
int x,y;
for(int i=1;i<=m;i++)
{
cin>>x>>y;
e[x].push_back(y);
e[y].push_back(x);
}
for(int i=1;i<=n;i++)
{
if(bk[i]==1)continue;
ans++;
dfs(i);
}
cout<<ans<<endl;
return 0;
}