2 3 3 1 2 2 3 3 1 4 4 1 2 2 3 3 4 4 1
0 2
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
typedef pair<int , int > P;
#define maxn 10
int num[maxn], g1[maxn], g2[maxn], n, m, T;
P e[30];
int sum;
void dfs(int t)
{
if(t == m + 1)
{
sum++;
return ;
}
int u = e[t].first;
int v = e[t].second;
if(g1[u] && g1[v])// online
{
g1[u]--, g1[v]--;
dfs(t + 1);
g1[u]++, g1[v]++;
}
if(g2[u] && g2[v])// offline
{
g2[u]--, g2[v]--;
dfs(t + 1);
g2[u]++, g2[v]++;
}
return ;
}
int main()
{
scanf("%d", &T);
while(T--)
{
memset(num, 0, sizeof num);
memset(g1, 0, sizeof g1);
memset(g2, 0, sizeof g2);
int flag = 1;
scanf("%d%d", &n, &m);
int u, v;
for(int i=1; i<=m; i++)
{
scanf("%d%d", &u, &v);
e[i] = {u, v};
num[u]++;
num[v]++;
}
for(int i=1; i<=n; i++)
{
if(num[i] & 1)
{
flag = 0;
break;
}
num[i] >>= 1;
g1[i] = g2[i] = num[i];
}
sum = 0;
dfs(1);
if(flag) printf("%d\n", sum);
else printf("0\n");
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/dojintian/article/details/47272713