原题地址

回溯搜索

对于每个待枚举的点,检查:

1. 度数检查:是否违反了出度入度限制。因为生成的路径除了首尾节点外,其他节点的出度和入度只能为2

2. 共线检查:是否违反了共线条件。即跨越了尚未枚举过的节点

对于枚举产生的路径,检查:

1. 长度检查:长度是否大于等于4

2. 完整性检查:是否包含了片段中出现的所有边

代码:

 #include <iostream>
#include <cstring> using namespace std; int impossible[]; bool integrity_check(int piece[][], int path[][]) {
for (int i = ; i < ; i++)
for (int j = ; j < ; j++)
if (piece[i][j] && !path[i][j])
return false;
return true;
} bool degree_check(int piece[][], int path[][], int b, int e) {
if (piece[b][e])
return true; int bdegree = ;
int edegree = ; for (int i = ; i < ; i++) {
bdegree += path[b][i] || piece[b][i] ? : ;
edegree += path[e][i] || piece[e][i] ? : ;
} return bdegree < && edegree < ;
} bool collineation_check(int visited[], int b, int e) {
int t = (b + ) * + e + ;
return impossible[t] < || visited[impossible[t] - ];
} bool check(int piece[][], int path[][], int visited[], int b, int e) {
if (visited[e])
return false; return degree_check(piece, path, b, e) && collineation_check(visited, b, e);
} int search(int piece[][], int path[][], int visited[], int p, int len) {
int res = ; if (len >= && integrity_check(piece, path))
res++; for (int i = ; i < && len < ; i++) {
if (check(piece, path, visited, p, i)) {
visited[i] = ;
path[p][i] = path[i][p] = ;
res += search(piece, path, visited, i, len + );
path[p][i] = path[i][p] = ;
visited[i] = ;
}
} return res;
} int main() {
int T;
memset(impossible, -, sizeof(int) * );
impossible[] = ;
impossible[] = ;
impossible[] = ;
impossible[]= ;
impossible[]= ;
impossible[]= ;
impossible[]= ;
impossible[]= ;
impossible[]= ;
impossible[]= ;
impossible[]= ;
impossible[]= ;
impossible[]= ;
impossible[]= ;
impossible[]= ;
impossible[]= ; cin >> T;
while (T--) {
int N;
int piece[][] = {{, }};
int path[][] = {{, }};
int visited[] = {};
int res = ; cin >> N;
for (int i = ; i < N; i++) {
int a, b;
cin >> a >> b;
piece[a - ][b - ] = piece[b - ][a - ] = ;
} for (int i = ; i < ; i++) {
visited[i] = ;
res += search(piece, path, visited, i, );
visited[i] = ;
} cout << res << endl;
}
return ;
}

hihoCoder#1054 滑动解锁的更多相关文章

  1. hihocoder#1054 : 滑动解锁(深度优先搜索)

    描述 滑动解锁是智能手机一项常用的功能.你需要在3x3的点阵上,从任意一个点开始,反复移动到一个尚未经过的"相邻"的点.这些划过的点所组成的有向折线,如果与预设的折线在图案.方向上 ...

  2. hihocoder 1054 滑动解锁 dfs

    详细分析见滑动解锁分析 AC代码 #include <cstdio> #include <cmath> #include <cctype> #include < ...

  3. hiho_1054_滑动解锁

    题目大意 智能手机九点屏幕滑动解锁,如果给出某些连接线段,求出经过所有给出线段的合法的滑动解锁手势的总数.题目链接: 滑动解锁 题目分析 首先,尝试求解没有给定线段情况下,所有合法的路径的总数.可以使 ...

  4. Swift: 打造滑动解锁文字动画

    原文:Swift: 打造滑动解锁文字动画 最近木事,找出来玩了玩facebook的paper.到处都是那个"slide to unlock your phone"的效果啊.忽闪忽闪 ...

  5. Selenium模拟JQuery滑动解锁

    滑动解锁一直做UI自动化的难点之一,我补一篇滑动解锁的例子,希望能给初做Web UI自动化测试的同学一些思路. 首先先看个例子. https://www.helloweba.com/demo/2017 ...

  6. C语言 · 滑动解锁

    题目:滑动解锁 滑动解锁是智能手机一项常用的功能.你需要在3x3的点阵上,从任意一个点开始,反复移动到一个尚未经过的"相邻"的点.这些划过的点所组成的有向折线,如果与预设的折线在图 ...

  7. jq实现简单的滑动解锁效果

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  8. APP九宫格滑动解锁的处理

    写手机自动化测试脚本关于APP九宫格滑动解锁方面采用了appium API 之 TouchAction 操作. 先是用uiautomatorviewer.bat查询APP元素坐标: 手工计算九宫格每个 ...

  9. 【转】Selenium模拟JQuery滑动解锁

    滑动解锁一直做UI自动化的难点之一,我补一篇滑动解锁的例子,希望能给初做Web UI自动化测试的同学一些思路. 首先先看个例子. https://www.helloweba.com/demo/2017 ...

随机推荐

  1. openssh安装、设置指定端口号、免密码登录、变量传递、防暴力破解

    首先确保机器挂在好光盘镜像,然后查看软件包信息 [root@xuegod63 ~]# df -hFilesystem      Size  Used Avail Use% Mounted on/dev ...

  2. ambari集群里如何正确删除历史修改记录(图文详解)

    不多说,直接上干货! 答:这些你想删除的话得得去数据库里删除,最好别删除 .  现在默认就是使用好的配置               欢迎大家,加入我的微信公众号:大数据躺过的坑        人工智 ...

  3. js的replace函数把"$"替换成成"\$"

    var aa = 18$    转换成   aa = 18\$ aa.replace("\$","\\\$");    注意JS的replace方法只能替换第一 ...

  4. iOS捷径(Workflow 2.0)拓展

    前言 iOS12 捷径(Workflow 2.0)入门 iOS12 捷径(Workflow 2.0)进阶 iOS12捷径(Workflow 2.0)实例大全 注:本文主要介绍如何获取URL Schem ...

  5. 如何向妻子解释OOD (转)

       此文译自CodeProject上<How I explained OOD to my wife>一文,该文章在Top Articles上排名第3,读了之后觉得非常好,就翻译出来,供不 ...

  6. springmvc 获取数组

    spingmvc 获取数据有这几种方式:1.通过HttpRequestServlet的方法获取数据.2.form表单传递对象字段,springmvc自动获取.3.ajax 请求通过注解的方式直接获取数 ...

  7. spark性能优化(包括优化原理及基本方法)

    https://www.jianshu.com/p/b8841a8925fb spark性能优化 1.诊断内存的消耗 2. 高性能序列化类库 3. 优化数据结构 4. 对多次使用的rdd进行持久化或者 ...

  8. iOS Cell异步图片加载优化,缓存机制详解

    最近研究了一下UITbleView中异步加载网络图片的问题,iOS应用经常会看到这种界面.一个tableView上显示一些标题.详情等内容,在加上一张图片.这里说一下这种思路. 为了防止图片多次下载, ...

  9. leetcode_951. Flip Equivalent Binary Trees_二叉树遍历

    https://leetcode.com/problems/flip-equivalent-binary-trees/ 判断两棵二叉树是否等价:若两棵二叉树可以通过任意次的交换任意节点的左右子树变为相 ...

  10. css 样式渲染

     1.文字过长时,自动换行