标签:
数据比较小,直接暴力深搜即可。
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 5 struct w 6 { 7 int x; 8 int y; 9 }p[10]; 10 int a[10],b[10],n,m,num[10],ans; 11 void dfs(int k) 12 { 13 if (k==m+1) 14 { 15 ans++; 16 return ; 17 } 18 if (a[p[k].x]&&a[p[k].y]) 19 { 20 a[p[k].x]--; 21 a[p[k].y]--; 22 dfs(k+1); 23 a[p[k].x]++; 24 a[p[k].y]++; 25 } 26 if (b[p[k].x]&&b[p[k].y]) 27 { 28 b[p[k].x]--; 29 b[p[k].y]--; 30 dfs(k+1); 31 b[p[k].x]++; 32 b[p[k].y]++; 33 } 34 return ; 35 } 36 37 int main() 38 { 39 int t; 40 cin>>t; 41 while (t--) 42 { 43 cin>>n>>m; 44 ans=0; 45 memset(a,0,sizeof(a)); 46 memset(b,0,sizeof(b)); 47 memset(num,0,sizeof(num)); 48 for (int i=1;i<=m;i++) 49 { 50 cin>>p[i].x>>p[i].y; 51 num[p[i].x]++; 52 num[p[i].y]++; 53 } 54 int flag=1; 55 for (int i=1;i<=n;i++) 56 { 57 a[i]=b[i]=num[i]/2; 58 if (num[i]%2!=0)//朋友总数是奇数的肯定不符合在线和不在线的人数相等 59 { 60 flag=0; 61 //break; 62 } 63 } 64 if (!flag) 65 { 66 cout <<0<<endl; 67 continue; 68 } 69 dfs(1); 70 cout <<ans<<endl; 71 } 72 return 0; 73 }
标签:
原文地址:http://www.cnblogs.com/arno-my-boke/p/4771020.html