開始对点搜索,直接写乱了。想了想对边搜索,尽管复杂度高。剪枝一下水过去了。

代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector> using namespace std; struct Edge{
int a,b;
}G[35]; int n,m,deg[10],on[10],off[10];
int res; void init(){
memset(deg,0,sizeof(deg));
res = 0;
} void dfs(int u){
//printf("%d\n",u);
if(u == m){
res++;
return;
}
int a,b;
a = G[u].a;b = G[u].b;
deg[a]--;deg[b]--; on[a]++;on[b]++;
if((deg[a] && deg[b]) ||
(!deg[a] && deg[b] && on[a] == off[a]) ||
(!deg[b] && deg[a] && on[b] == off[b]) ||
(!deg[a] && !deg[b] && on[a] == off[a] && on[b] == off[b]))
dfs(u+1);
on[a]--;on[b]--; off[a]++;off[b]++;
if((deg[a] && deg[b]) ||
(!deg[a] && deg[b] && on[a] == off[a]) ||
(!deg[b] && deg[a] && on[b] == off[b]) ||
(!deg[a] && !deg[b] && on[a] == off[a] && on[b] == off[b]))
dfs(u+1);
off[a]--;off[b]--;
deg[a]++;deg[b]++;
} int main(){
int cas; scanf("%d",&cas);
while(cas--){
scanf("%d%d",&n,&m);
init();
for(int i=0;i<m;i++){
scanf("%d%d",&G[i].a,&G[i].b);
deg[G[i].a]++;deg[G[i].b]++;
}
dfs(0);
printf("%d\n",res);
}
return 0;
}

最新文章

  1. 如何让js不产生冲突,避免全局变量的泛滥,合理运用命名空间
  2. Cocos2d入门--1--初涉相关属性或代码
  3. Linux下的paste合并命令详解
  4. ASP.NET读取配置文件发送邮件
  5. Eclipse错误
  6. LinkButton( 按钮)
  7. javascript真的是异步的吗?且看setTimeout的实现原理以及setTimeout(0)的使用场景
  8. Couchbase 中的分布式储存
  9. webpack4配置详解之新手上路初探
  10. ubuntu18.04静态ip设置
  11. MapReduce多种join实现实例分析(二)
  12. 小奶狗给小喵咪上CSS课程
  13. 细说一下position(定位),以及其他的小知识
  14. 20款最好的jQuery文件上传插件
  15. MySQL将DESC等关键字作为列名表名的处理方式
  16. BitArray源码解析
  17. 01-Python的基础知识2
  18. 在 Azure 中的 Windows 虚拟机上使用 SSL 证书保护 IIS Web 服务器
  19. 为什要使用预编译SQL?(转)
  20. [转]为Kindeditor控件添加图片自动上传功能

热门文章

  1. 【分享】GEARS of DRAGOON 1+2【日文硬盘版】[带全CG存档&amp;amp;攻略+SSG改动+打开存档补丁]
  2. fgets()函数和sscanf()函数的使用方法
  3. Gzip压缩优化网站
  4. js中的三种函数写法
  5. 云:VMware
  6. 13. Roman to Integer[E]罗马数字转整数
  7. Redis学习笔记(六) 基本命令:List操作
  8. HD-ACM算法专攻系列(17)——find your present (2)
  9. hdu 1754 I Hate It【线段树】
  10. 03《UML大战需求分析》之三