1、判断环并且输出每个环的元素,大小
void dfs(int u,int fa)
{
dep[u] = 1;
for(int i=0;i<edge[u].size();i++)
{
int x = edge[u][i];
if(x==fa)continue;
if(dep[x]==0){
pre[x] = u;
dfs(x,u);
}
if(dep[x]==1){
int tmp = dep[u]-dep[x]+1;
int temp = u;
int count = 1;
while (temp!=x) //找路径
{
cout << temp << " ";
count++;
temp = pre[temp];
}
cout << x << endl;
nums++; //环数+1
}
}
}
2、仅仅判断环的数量,每个环中元素的数量
void dfs(int u,int fa)
{
dep[u] = dep[fa]+1;
for(int i=0;i<edge[u].size();i++)
{
int x = edge[u][i];
if(x==fa)continue;
if(dep[x]==0){
dfs(x,u);
pre[x] = u;
}
if(dep[u]>dep[x]){
int tmp = dep[u]-dep[x]+1;//环的大小
cnt++;//环的数量加一
}
}
}
PS:附main函数
for(int i=1;i<=m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
edge[u].push_back(v);
edge[v].push_back(u);
}
for(int i=1;i<=n;i++)
{
if(!dep[i])dfs(i,0);
}