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

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

无意中看到了这道题 而且在知乎回答中 各种语言啊  于是我今天上午无聊时也想做做了  哈哈

我可是没看别人的代码  看了正确结果~  因为感觉搜索搜来搜去 好爽啊  就按照自己想的写了

知乎这道题地址:https://www.zhihu.com/question/24905007

使用DFS(深搜即可)  遍历所有可能的情况  然后筛选不可能的情况

首先使用一个数组 把不可能出现的情况列出

 filter[1][3]=filter[3][1]=2;filter[4][6]=filter[6][4]=5;filter[7][9]=filter[9][7]=8;filter[1][7]=filter[7][1]=4;filter[2][8]=filter[8][2]=5;filter[3][9]=filter[9][3]=6;filter[1][9]=filter[9][1]=5;filter[3][7]=filter[7][3]=5;

然后深搜的同时也进行筛选

void dfs(int count)
{if(count>=4){result++;}for(int i=1;i<=9;i++){if(count>0&&!vis[filter[stamp[count-1]][i]])continue;if(!vis[i]){vis[i]=1;stamp[count]=i;dfs(count+1);vis[i]=0;}}return ;
}

全部代码:

#include <stdio.h>
#include <string.h>
int filter[10][10];
int stamp[9];
bool vis[10];
int result;
void dfs(int count)
{if(count>=4){result++;}for(int i=1;i<=9;i++){if(count>0&&!vis[filter[stamp[count-1]][i]])continue;if(!vis[i]){vis[i]=1;stamp[count]=i;dfs(count+1);vis[i]=0;}}return ;
}
int main()
{memset(filter,0,sizeof(filter));filter[1][3]=filter[3][1]=2;filter[4][6]=filter[6][4]=5;filter[7][9]=filter[9][7]=8;filter[1][7]=filter[7][1]=4;filter[2][8]=filter[8][2]=5;filter[3][9]=filter[9][3]=6;filter[1][9]=filter[9][1]=5;filter[3][7]=filter[7][3]=5;result=0;vis[0]=true;dfs(0);printf("%d\n",result);
}

结果:

手机的九宫格图案解锁总共能绘出多少种图案?(hiho模拟面试题2 - google在线技术笔试模拟)相关推荐

  1. 用C语言计算手机的九宫格图案解锁总共能绘出多少种图案

    之前在学校的一个社团招募大一新生时,给出了这个题目: 用程序编写完成九宫格图案解锁总共能绘出多少种图案 需要满足的要求有: 1.至少经过四个点: 2.不能重复经过同一个点: 3.路径上的中间点不能跳过 ...

  2. hiho#1054 : 滑动解锁 (hiho模拟面试题2 - google在线技术笔试模拟)

    #1054 : 滑动解锁 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 滑动解锁是智能手机一项常用的功能.你需要在3x3的点阵上,从任意一个点开始,反复移动到一个尚未经过 ...

  3. 手机的九宫格图案解锁总共能绘出多少种图案?LeetCode 351. Android Unlock Patterns

    需要满足的要求有: 至少经过四个点: 不能重复经过同一个点: 路径上的中间点不能跳过(如从1到3一定会经过2): 如果中间的点是之前已经用过的,那么这个点就可以被跳过(如213,因为2已经被用过,1就 ...

  4. 用c语言画出一个五角星图案,用c语言画出一个五角星图案.doc

    用c语言画出一个五角星图案 感觉上五角星和六角星 的思路差不多,所以就不做重复劳动啦~嘿嘿O(∩_∩)O~ 以下公布一个非本人的代码,虽然感觉这个五角星画的不是很"正",但总体感觉 ...

  5. Appium九宫格滑动解锁研究

    九宫格滑动解锁,目前发现有两种一种是每个可点的方格都是一个imageview,九宫格则对应有9个imageview,此类解锁已有前人研究解决了,可以参照tobecrazy的博客 今天我要说的是另一种, ...

  6. Flex【原创】模拟Android图案解锁

    Flex 实现Android图案解锁功能 看见Andorid系统里面有图案解锁的功能,试想能用Flex的移动开发实现吗?答案是:完全可以! 环境:Flex 4.6(air3.2) 先看我的包结构: 第 ...

  7. 九宫锁屏图案有多少种c语言编程,手机九宫格图案解锁问题,编程高手戳进来!...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 数学吧里看到的一个有趣问题,题目描述很简单: 求手机九宫格图案解锁一共有多少种答案.规则大家应该都知道,至少连四个点,最多连九个点,一条直线上的三个点只有 ...

  8. Android之高仿手机QQ图案解锁

    本文源码(utf-8编码):http://download.csdn.net/detail/weidi1989/6628211 ps:请不要再问我,为什么导入之后会乱码了. 其实,代码基本上都是从原生 ...

  9. 手机9宫格图案解锁方法总数计算

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

最新文章

  1. 关于C++中的虚拟继承的一些总结
  2. 成功解决raise XGBoostError(_LIB.XGBGetLastError()) xgboost.core.XGBoostError: b'[22:08:00] C:\\Users\\Ad
  3. 面试题:彻底理解ThreadLocal 索引的利弊 背1
  4. mysql 雇员表脚本,mysql压力测试脚本实例_MySQL
  5. axture动画原型制作_Axure制作原型-基础操作
  6. Reddit程序员的酒后真言
  7. Windows中导出电脑文件名或者文件结构的方法
  8. Maven常用命令-创建Java项目
  9. SCPPO(二十一):系统统一身份认证的改造之路(续)
  10. 小白用python处理excel文件-Python3操作Excel文件(读写)的简单实例
  11. javascript 函数与对象
  12. 数据流图、业务流程图、E-R图、系统功能结构图、程序流程图
  13. Java学习经典《第一行代码》第二版
  14. 降噪软件让NVH诊断更轻松
  15. 小米大佬分享8年工控上位机工作经历
  16. 7.python 移动目录下的文件至另一个目录下
  17. Redis数据库相关知识总结
  18. Java爬虫批量爬取图片
  19. RFID服装店面管理系统
  20. 计算机原理与设计verilog pdf,计算机原理与设计: Verilog HDL版

热门文章

  1. 简单编程-测试反应能力
  2. c++ 按键暂停继续 程序_这个单片机程序怎么加按键,能够暂停,继续,计数?...
  3. 智链万源CEO董宁:企业数字化建设迫在眉睫 | 链人物
  4. 4、监督学习--分类--神经网络
  5. Java程序编译后的扩展名_一个Java源程序经过编译后,得到的文件扩展名一定是.class。...
  6. 选购家用计算机配置方案汇报,开网店、普通家用、办公、炒股、学习等用途的入门电脑主机配置...
  7. Ghost XP SP3 纯净标准版 V2013.10
  8. 360居然扫描了我电脑上所有的隐私数据
  9. 一个MM的故事——淡淡的,很温馨
  10. GOOGLE地球浏览器分析(一):地图服务产业分析