hihoCoder#1054 滑动解锁
回溯搜索
对于每个待枚举的点,检查:
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 滑动解锁的更多相关文章
- hihocoder#1054 : 滑动解锁(深度优先搜索)
描述 滑动解锁是智能手机一项常用的功能.你需要在3x3的点阵上,从任意一个点开始,反复移动到一个尚未经过的"相邻"的点.这些划过的点所组成的有向折线,如果与预设的折线在图案.方向上 ...
- hihocoder 1054 滑动解锁 dfs
详细分析见滑动解锁分析 AC代码 #include <cstdio> #include <cmath> #include <cctype> #include < ...
- hiho_1054_滑动解锁
题目大意 智能手机九点屏幕滑动解锁,如果给出某些连接线段,求出经过所有给出线段的合法的滑动解锁手势的总数.题目链接: 滑动解锁 题目分析 首先,尝试求解没有给定线段情况下,所有合法的路径的总数.可以使 ...
- Swift: 打造滑动解锁文字动画
原文:Swift: 打造滑动解锁文字动画 最近木事,找出来玩了玩facebook的paper.到处都是那个"slide to unlock your phone"的效果啊.忽闪忽闪 ...
- Selenium模拟JQuery滑动解锁
滑动解锁一直做UI自动化的难点之一,我补一篇滑动解锁的例子,希望能给初做Web UI自动化测试的同学一些思路. 首先先看个例子. https://www.helloweba.com/demo/2017 ...
- C语言 · 滑动解锁
题目:滑动解锁 滑动解锁是智能手机一项常用的功能.你需要在3x3的点阵上,从任意一个点开始,反复移动到一个尚未经过的"相邻"的点.这些划过的点所组成的有向折线,如果与预设的折线在图 ...
- jq实现简单的滑动解锁效果
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- APP九宫格滑动解锁的处理
写手机自动化测试脚本关于APP九宫格滑动解锁方面采用了appium API 之 TouchAction 操作. 先是用uiautomatorviewer.bat查询APP元素坐标: 手工计算九宫格每个 ...
- 【转】Selenium模拟JQuery滑动解锁
滑动解锁一直做UI自动化的难点之一,我补一篇滑动解锁的例子,希望能给初做Web UI自动化测试的同学一些思路. 首先先看个例子. https://www.helloweba.com/demo/2017 ...
随机推荐
- String Mark Codeforces - 895D
一看好像会做的样子,就去做了一下,结果 猝不及防地T掉了 赶紧查了一下,没有死循环,复杂度也是对的,无果,于是翻了题解 题解没看懂,但是找到了标程,然后发现我被卡常了... 而且好像当时还过了前10个 ...
- Android网络连接判断与检测
转自: http://www.cnblogs.com/qingblog/archive/2012/07/19/2598983.html 本文主要内容: 1)判断是否有网络连接 2)判断WIFI网络是否 ...
- 用C#操作word替换字符,用spire
这两天想写个小程序,是用C#操作word文档的.许多人都对微软本身的解决方案COM组件十分不看好,比如需要本机安装office等等,总之吐槽很多,直接放弃. 搜到一个国产的npoi库,据说操作简单功能 ...
- js内置对象总结
在js里,一切皆为或者皆可以被用作对象.可通过new一个对象或者直接以字面量形式创建变量(如var i="aaa"),所有变量都有对象的性质. 注意:通过字面量创建的对象在调用属性 ...
- APK瘦身-是时候给App进行减负了
前言 APK瘦身即是对APK大小进行压缩策略,减小APK安装包大小,更小的安装包更有助于吸引用户安装.前一段时间我司某一App进行APK的瘦身,最终也达到了减小10M的目标,现做一个简单的总结记录. ...
- 经典算法mark
在平时找工作的时候,或多或少会遇到一些算法问题,很多都是比较经典或者网上已经流传很久的.只是我们没有接触过,所以不知道怎么解决. 在这儿,我自己总结一些我遇到的一些经典算法,给自己增加一点记忆,也给需 ...
- MYSQL之错误代码----mysql错误代码与JAVA实现
原文地址:MYSQL之错误代码----mysql错误代码与JAVA实现作者:戒定慧 his chapter lists the errors that may appear when you call ...
- 1.C#冒泡排序
冒泡 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.这步做完后,最后的元素会是最大的数. 针对所有的元素重复以上的步骤,除了最后一 ...
- python3+beautifulSoup4.6抓取某网站小说(一)爬虫初探
本次学习重点: 1.使用urllib的request进行网页请求,获取当前url整版网页内容 2.对于多级抓取,先想好抓取思路,再动手 3.BeautifulSoup获取html网页中的指定内容 4. ...
- scrollfix.js插件:滚动固定在某个位置
插件文件在/文件 scrollfix.js 用法: var fix = $(".fix"), fixtop = $(".fix-top"), fixStartT ...