从而达到去重的效果
_____________________________________
这题真心不错,再更一波
这里除了用邻接矩阵来做,用邻接表也是挺不错的
再做一遍犯了一个小小的错误,就是没有判断 point点到了哪,而是每次设置都去克鲁斯卡尔了一遍
这个题不同于其他深搜的是 要等所有的段都设置好状态之后再进行查重,这里没有考虑到。
另外进行克鲁斯卡尔的时候只针对 亮的段码,不亮的不需要考虑emm~
#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; }