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

有些人可能有和我一样的疑问,在这小小的9个点中,图案密码总共有多少种形式呢?今天我就使用深度优先搜索的方法解决这个问题。具体c++代码如下:

#include<iostream>
using namespace std;int isvisit[10]={0};//表示当前该点是否在路径中
int noPath[8][3]={{1,3,2},{4,6,5},{7,9,8},{1,7,4},{2,8,5},{3,9,6},{1,9,5},{3,7,5}};//每项的三个数字{a,b,c}表示:当点c未在路径上时,<span style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">点a和点b不能直接相连</span>
int j,k;

int hasPath(int start,int end)//判断此时两点是否可以直接相连
{for(j=0;j<8;j++){if( (start==noPath[j][0]&&end==noPath[j][1]) || (start==noPath[j][1]&&end==noPath[j][0]) ){if(isvisit[ noPath[j][2] ])<span style="white-space:pre">   </span>//表示点c已经在路径上,a和b直接可以直接连接return 1;else return 0;}}return 1;
}int dfs(int start,int length)
{int count = 0;isvisit[start]=1;int i;for(i=1;i<10;i++)<span style="white-space:pre">  </span>//遍历所有为访问的点{if(i==start || isvisit[i])continue;if(hasPath(start,i)){count += dfs(i,length+1);<span style="white-space:pre">  </span>//递归搜索}}isvisit[start]=0;if(length>=4)<span style="white-space:pre">     </span>//如果路径长度超过4,则该路径符合要求count++;return count;
}
int main()
{int result=0;for(k=1;k<10;k++)<span style="white-space:pre">   </span>//分别从9个点开始dfs,为提升效率,此处可以根据对称原则减少不必要的运算result+=dfs(k,1);cout << result << endl;return 0;
}

运算结果为:389112

手机9宫格图案解锁方法总数计算相关推荐

  1. Android 图案解锁 9宫格密码解锁

    序言  第一次写Android技术博客,不知道该如何下手. 背景  现在人们越来越重视自己的隐私,对于一些涉及用户隐私的应用,用户可能会希望在应用启动时必须先输入密码.传统的数字式密码记忆繁琐.容易破 ...

  2. 锁定单个或多个单元格与解锁方法

    http://office.jb51.net/excel2003/3598.html 企业管理的一项重要手段就是数据报表,同一归口管理的各个子单位的报表都用同一个格式和结构的软件,这就是常说的模板.在 ...

  3. 魅蓝e格机解锁方法_魅蓝E手机锁屏密码忘了怎么办?忘了手机密码怎么办?

    众所周知,手机已经成为了我们日常生活中的一部分.但是有些粗心大意的朋友,往往前一天晚上刚设置的密码,到第二天早上想要用手机的时候突然忘了手机密码,那么小编今天就教大家怎么解决这个问题. 手机锁屏密码忘 ...

  4. Excel方向键无法移动单元格/scrollLock解锁方法

    用excel办公很久,今天第一次遇到了方向键无法使单元格移动,而是整个表单一起移动的情况. 最初还以为是电脑卡住了,重启excel若干次才发现并非如此.谷歌许久发现是自己无意中开启了ScrollLoc ...

  5. PHP直播平台源码Android自定义View:9宫格图形手势解锁

    9宫格图形解锁的操作就是在9个点上进行的,所以我们先定义一个点类,该类主要用于存储点的信息:坐标,状态,位置. public class Point {//正常状态public static int ...

  6. Python网络爬虫开发实战,微博宫格验证码的识别

    本节我们来介绍一下新浪微博宫格验证码的识别,此验证码是一种新型交互式验证码,每个宫格之间会有一条指示连线,指示了我们应该的滑动轨迹,我们需要按照滑动轨迹依次从起始宫格一直滑动到终止宫格才可以完成验证, ...

  7. java实现九宫格解锁_Java计算手机九宫格锁屏图案连接9个点的方案总数

    (一)问题 九宫格图案解锁连接9个点共有多少种方案? (二)初步思考 可以把问题抽象为求满足一定条件的1-9的排列数(类似于"八皇后问题"),例如123456789和9876543 ...

  8. android屏幕解锁图案,安卓手机图案屏幕锁解锁方法!!

    当你的安卓手机密码锁忘记了怎么办?今天一不小心把手机改了图案锁结果由于改的时候匆忙结果忘记了,在网上找了好多方法都无果,也有人说重新刷机就会好!!这个简直就是废话,刷机当然能好了!! 关键是解锁要解决 ...

  9. 9宫格解锁 android_android开发图案解锁学习记录一(九宫格的绘制)

    图案解锁的原理: 九宫格解锁故名思议就是要有九个宫格:然后宫格间进行连线. 首先我们要先绘制九个点(宫格),确定位置,然后绘制不同的图案. 图案分为不同的状态:正常的状态,按下时的状态和错误的状态 当 ...

最新文章

  1. 启动子级时出错_减速机安装与使用时需注意的八个要点,细节很重要!
  2. 英伟达宣布最新自动驾驶芯片!GTC 黄教主精彩报告
  3. ubuntu 图形化更换apt源
  4. CString, BSTR, LPCTSTR 概念(转)
  5. deepin 安装 kvm-manager
  6. python 图像格式转换_如何用六行Python构建图像类型转换器
  7. 2020统计局的行政划分表_湖州市有几个区和县?湖州市2020年县级以上区划名单...
  8. 简单python脚本实例-终于晓得python入门脚本实例
  9. java编写一个汽车类,有属性:品牌、型号、排量、速度,有方法:启动、加速、转弯、刹车、息火...
  10. python工程师简历项目经验怎么写_班长项目经验简历范文
  11. c#中将word转成图片,无水印
  12. 豆瓣电影Top250信息爬取并保存到excel文件中!
  13. 华硕无线路由打印机服务器,华硕RT-AC86U路由器怎么共享打印机
  14. 工作后的5种放松方法
  15. 招投标知识分享:影响投标报价编制的8大重要因素
  16. 如何增加架设传奇服务器
  17. 谷歌地图-Google Map
  18. 《逆向工程核心原理》相关说明
  19. 00后大学生,学微积,用手机,从味同嚼蜡到喜闻乐见
  20. android pmem内存,android内存管理-ION/PMEM【转】

热门文章

  1. FS、DFS、FT、DTFT、DFT、FFT、DCT变换的联系与区别
  2. 2021年昆明师专附中高考成绩查询,云南师范大学附属中学2021年录取分数线
  3. 塔防TDTK 敌人移动到目标转向
  4. VUE 学习笔记(三) Vue 渲染流程详解
  5. 2020熔化焊接与热切割模拟考试及熔化焊接与热切割作业模拟考试
  6. DVD/CD-ROM驱动器感叹号解决方法
  7. 12-17-2018学习-2.310.5
  8. python泰坦尼克号案例分析课程设计_让课堂充满人文关怀--《泰坦尼克号》案例分析(网友来稿)...
  9. 零濡鸦之巫女服装解锁mod
  10. 微信小程序---微信支付流程实现