题目链接:传送门

时间限制:2000ms
单点时限:1000ms
内存限制:256MB

描述

滑动解锁是智能手机一项常用的功能。你需要在3x3的点阵上,从任意一个点开始,反复移动到一个尚未经过的"相邻"的点。这些划过的点所组成的有向折线,如果与预设的折线在图案、方向上都一致,那么手机将解锁。两个点相邻当且仅当以这两个点为端点的线段上不存在尚未经过的点。此外,这条折线还需要至少经过4个点。

为了描述方便,我们给这9个点从上到下、从左到右依次编号1-9。那么1->2->3是不合法的,因为长度不足。1->3->2->4也是合不法的,因为1->3穿过了尚未经过的点2。2->4->1->3->6是合法的,因为1->3时点2已经被划过了。

作为一个爱逛知乎的好少年,小Hi已经知道一共有389112种不同的解锁方案。不过小Hi不满足于此,他希望知道,当已经瞥视到一部分折线的情况下,有多少种不同的方案。

遗憾的是,小Hi看到的部分折线既不一定是连续的,也不知道方向。例如看到1-2-3和4-5-6,那么1->2->3->4->5->6,1->2->3->6->5->4, 3->2->1->6->5->4->8->9等都是合法的方案。

输入

第一行包含一个整数T(1 <= T <= 10),代表测试数据组数。

每个测试数据第一行是一个整数N(0 <= N <= 8),代表小Hi看到的折线段数目。

以下N行每行包含两个整数X, Y (1 <= X, Y <= 9),代表小Hi看到点X和点Y是直接相连的。

输出

对于每组数据输出合法的方案数目。

样例输入

3
0
8
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
4
2 4
2 5
8 5
8 6  
样例输出
389112
2
258

解题思路:一看就是搜索

#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <queue>
#include <set>
#include <string>
#include <stack>
#include <algorithm>
#include <map>
#include <bitset>
using namespace std;
typedef long long ll;
const int N = 1007;
const int M = 11;
const int INF = 0x3fffffff;
const int mod = 1e9+7;
const double Pi = acos(-1.0);
const double sm = 1e-9;int data[10][10],rec[10][10],vis[10],re[3][3],tot;bool judge1()
{for( int i = 1 ; i <= 9 ; ++i ){for( int j = i ; j <= 9 ; ++j ){if( data[i][j] && !rec[i][j] ) return false;}}return true;
}bool judge2( int u , int v )
{if( u > v ) swap(u,v);bool flag = false;switch(u){case 1:if( (v==3&&!vis[2])||(v==7&&!vis[4])||(v==9&&!vis[5]) ) flag = true; break;case 2:if( v==8&&!vis[5] ) flag = true; break;case 3:if( (v==7&&!vis[5])||(v==9&&!vis[6]) ) flag = true; break;case 4:if( v==6&&!vis[5] ) flag = true; break;case 7:if( v==9&&!vis[8] ) flag = true; break;}return flag;
}void dfs( int u , int pos )
{if( pos >= 3 && judge1() ) ++tot;for( int i = 1 ; i <= 9 ; ++i ){if( !vis[i] && !judge2(u,i) ){rec[u][i] = rec[i][u] = 1;vis[i] = 1;dfs(i,pos+1);rec[u][i] = rec[i][u] = 0;vis[i] = 0;}}
}int main()
{int T,n,a,b;cin >> T;while( T-- ){cin >> n;memset( data , 0 , sizeof(data) );for( int i = 0 ; i < n ; ++i ){cin >> a >> b;data[a][b] = data[b][a] = 1;}int ans = 0;for( int i = 1 ; i <= 9 ; ++i ){tot = 0;memset( vis , 0 , sizeof(vis) );memset( rec , 0 , sizeof(rec) );vis[i] = 1;dfs(i,0);ans += tot;}cout << ans << endl;}return 0;
}

hihoCoder1054—滑动解锁(深搜)相关推荐

  1. 【八中测试】滑动解锁(HihoCoder - 1054)

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

  2. 22-广搜深搜 Breadth-first Search Depth-first Search

    参考:<算法导论>第22章  <算法图解>第6章 目录 图G=(V,E) 广度优先搜索 一:模板(POJ 3984 迷宫问题)(bfs+输出路径) 二:闪现(类似问题http: ...

  3. 算法学习 (门徒计划)3-3 深搜(DFS)与广搜(BFS)及经典问题 学习笔记

    算法学习 (门徒计划)3-3 深搜(DFS)与广搜(BFS)及经典问题 学习笔记 前言 深搜与广搜 搜索的核心概念 问题求解树 搜索剪枝和优化 问题求解树的状态 对比深搜与广搜 DFS-深度(deep ...

  4. Go 分布式学习利器(15) -- Go 实现 深搜和广搜

    强化语法,回顾算法. 通过Go语言实现 深度优先搜索 和 广度优先搜索,来查找社交网络中的三度好友关系(三度指的是一个节点到 其相邻节点 到 其相邻节点的节点 ,图递增三层好友关系). 涉及到的Go语 ...

  5. 水管工游戏 (深搜)

    水管工游戏 本题依然是采用搜索,深搜,广搜都可以,本代码采用深搜,此题在搜索时需要增加一些判断条件以及下一步要搜索的位置即可. 代码如下: #include<stdio.h> int a[ ...

  6. Poj(2488),按照字典序深搜

    题目链接:http://poj.org/problem?id=2488 思路:按照一定的字典序深搜,当时我的想法是把所有的可行的路径都找出来,然后字典序排序. 后来,凡哥说可以在搜索路径的时候就按照字 ...

  7. [数据结构] 迷宫问题(栈和队列,深搜和广搜)

    代码: #include <iostream> #include <string.h> #include <stack> #include <queue> ...

  8. android自定义滑块解锁,android 滑动解锁

    通过android自定义View实现横向的滑动解锁,1.滑动到中间会自动返回到原始的位置,2.滑动到底部会自动解锁,会触发解锁的回调:首先看效果图如下: 实现以上部分一共分为三部分: 其中背景通过sh ...

  9. 迷宫问题最短捷径c语言深搜,迷宫问题 C语言实现(深搜)

    问题描述: 2015年05月21日 10:24:05 这是我自己出的一道题   其原型基于迷宫问题,用深搜来解决的!我就简单的说一说吧! 给定一个N * M 的迷宫!,1代表有障碍,0代表无障碍可通行 ...

最新文章

  1. 重学前端之(4)函数、作用域、预解析
  2. php添加linux定时任务,PHP与Linux定时任务
  3. Mysql(3)——mysql数据类型
  4. 引用:初探Sql Server 执行计划及Sql查询优化
  5. element实现动态路由+面包屑
  6. PAT 1017 Queueing at Bank[一般]
  7. js 的prototype 属性和用法,外加__proto__
  8. 全面支持3.0 新华三“力夯”可信计算发展
  9. tfhpple解析html中的图片,图文详解使用TFHpple解析html方法
  10. 返回三级联动的JSON数据
  11. Vue.js自定义指令的用法与实例
  12. Hadoop数据分析实例:P2P借款人信用风险实时监控模型设计
  13. 并行程序设计导论pdf电子书_并行程序设计导论
  14. 《编译学习计划【第一季】》- C语言中的qsort函数
  15. csdn 问答使用与测评
  16. mysql语句中limt_mysql sql语句中的limit用法
  17. 手机上最简单的计算机,怎么把手机文件传到电脑,才最简单又快速?
  18. Chrome浏览器显示“Adobe flash player已过期”问题之解决
  19. 红楼梦人物出场统计python_用Python分析《红楼梦》:见证贾府的兴衰
  20. Oracle分区表索引

热门文章

  1. C++语言程序设计第五版 - 郑莉(第四章课后习题)
  2. ftp服务器文件防盗链,IIS防盗链组件
  3. 你还在为无法完美卸载SQL Server 2008 R2而烦恼吗?
  4. 大数据给物流带来了什么?
  5. Python适合0基础菜鸟学吗
  6. sql语法基础,sql分组查询
  7. ESP8266-002 ESP8266EX简介
  8. linux查看硬盘信息命令
  9. Python小练习—— 如何统计序列中元素的频度
  10. python读写配置文件