Friends
For each testcase, the first line contains two integers n (1≤n≤8) and m (0≤m≤n(n−1)2), indicating the number of people and the number of pairs of friends, respectively. Each of the next m lines contains two numbers x and y, which mean x and y are friends. It is guaranteed that x≠y and every friend relationship will appear at most once.
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
int x[50],y[50],index[50],on[50],off[50],ans,m,n;
void dfs(int num)
{
if(num==m+1){
for(int i=1;i<=n;i++)
if(on[i]!=off[i])
return ;
ans++;
return ;
}
int a=x[num],b=y[num];
if(on[a]<index[a]/2&&on[b]<index[b]/2){
on[a]++;
on[b]++;
dfs(num+1);
on[a]--;
on[b]--;
}
if(off[a]<index[a]/2&&off[b]<index[b]/2){
off[a]++;
off[b]++;
dfs(num+1);
off[a]--;
off[b]--;
}
return ;
}
int main()
{
int t;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
memset(index,0,sizeof(index));
memset(on,0,sizeof(on));
memset(off,0,sizeof(off));
for(int i=1;i<=m;i++){
scanf("%d%d",&x[i],&y[i]);
index[x[i]]++;
index[y[i]]++;
}
ans=0;
dfs(1);
printf("%d\n",ans);
}
return 0;
}