在dfs中通过并查集找到有多少个根节点,当只有一个根节点的时候进行记录
从而达到去重的效果
#include<bits/stdc++.h>
using namespace std;
int a[8][8];
int zufu[8];
int visit[8];
int sum=0;
int find(int x)//寻找祖父节点
{
while(x!=zufu[x])
x=zufu[x];
return x;
}
void dfs(int point)
{
int cnt=0;
if(point>7)//当七条路的状态都已经设置好后
{
int i,j;
for(i=1;i<=7;i++)//设置默认祖父节点
{
zufu[i]=i;
}
for(i=1;i<=7;i++)
{
for(j=1;j<=7;j++)
{
if(a[i][j]==1&&visit[i]==1&&visit[j]==1) //如果他俩都亮了,并且相连就算一条
{
int curx=find(i);
int cury=find(j);
if(curx!=cury)
zufu[cury]=curx;
}
}
}
for(i=1;i<=7;i++)//看看有几条根
{
if(zufu[i]==i&&visit[i]==1)
cnt++;
}
if(cnt==1)//当只存在一条根的时候 加1
{
sum++;
}
return ;
}
visit[point]=1;//让这条路通
dfs(point+1);
visit[point]=0;
dfs(point+1);
}
int main()
{
int i,n,m;
for(i=1;i<=10;i++)
{
cin>>n>>m;
a[n][m]=a[m][n]=1;
}
dfs(1);
cout<<sum;
}