手机九宫格滑锁密码的所有密码组合计算

破解android手机屏幕九宫格锁屏 原理: 1、九宫格有九个点,每个点都有一个编号,其排布顺序为: 00  01  02 03  04  05 06  07  08 2、根据你所画的图形将某几个数(4到9个)排列在一起,得到一个数字序列,比如 虽然看起来很复杂,其实生成的数字序列只是:00 03 07 05 02 04 06 01 08 3、系统将这一串数字序列以十六进制的方式进行SHA1加密,存储在手机里的/da 阅读详情

题目好像是哪个公司的笔试题,同学给我的,然后自己就试着写写,才学浅陋,花了蛮多时间写的

题目大致意思如下:

                 

手机九宫格解锁图案如上,假设把一次先行后列标记九个圆一次为1,2,3,4,5,6,7,8,9这九个数字,求所有合法的密码情况

合法的密码我们假设要求如下:

1、假设密码的长度至少为2,最长当然为9

2、密码中不能有重复的数字出现,比如不能同时出现两个2

3、还有就是密码相邻的数字必须在图形上是相连的,这样才符合手的滑动

      比如1之后只能是2、4、5三种可能,2之后只能是1、3、4、5、6五种可能情况,也就是每个数最多有八种下一步的走法

现在就是把所有的情况罗列出来


解法:解法可能不是很高效,主要使用了深度遍历算法,假设先以1作为开始点,使用深度遍历,每次都判断当前数的八个方向,如果有某一个方向上的点没有超出边界

            那就先遍历那个点,这样深度遍历下去。

            最主要的问题就是怎么记录下已经遍历的路线,因为要输出所有的情况,这样必须时刻记录当前遍历的路线。

            还有就是已经遍历的点需要做标记才能避免后面不会遍历重复的点情况出现。这也是一个难点之一。开始的时候想过使用一个二维数组作为标记,但是后来觉得不对,

假设我们先开始遍历1,那之后遍历2,此时如果用全部二维数组标记的话,也就是1和2都已经标记走过了。那在2的情况下深度遍历下去,后面肯定会回退回来到点1的另外

的方向,比如说4,此时遍历的顺序为1、4,也就是在这种顺序下的话2是没有遍历的,但是用全局二维数组就是前面已经标记了,这样的话后面就混乱了,所以用这样的方法不行。

             后来想了方法用链表记录已经遍历的点,因为是深度遍历,每次都是通过不断的递归调用遍历,在递归中使用for判断八个方向,没有遍历则递归下去。

             每次把在判断方向中符合的点插入链表末尾,然后递归遍历该点,遍历时候判断链表长度符合要求则为一种情况并输出。

             每次插入到链表末尾的时候都会用指针指向末尾的结点,这样在递归倒退的时候,也就是换另一条线路,也就是此时末尾的结点要重新改为没有遍历过的,所以递归返回时把链表末尾的结点删除。

              同时在结点信息中记录step,记录此时是第几个结点,也就是遍历的长度。


代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<fstream.h>
#include<iomanip.h>

struct node {   // 记录遍历的数字链表
	int num;    // 记录当前链表结点数字
	int step;   // 从表头到当前点的步数
	struct node *next;  // 指向下一个结点
}; 

struct load {  // 方向结点(x,y)
	int x;
	int y;
};

load dir[8] = {{0,-1},{-1,-1},{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1}};  // 记录八个方向数组

int map[3][3] = {{{1},{2},{3}},{{4},{5},{6}},{{7},{8},{9}}};  // 记录地图数字

node *Linklist;  // 记录已经走过链表指针
node *end;       // 每次指向链表的结尾,即记住当前已走的最后一个数字

void Traversal() {   // 遍历当前聊表,即输出一种情况
	node *p;
	p = Linklist;
	while(p->next) {
		printf("%d --> " , p->num);
		p = p->next;
	}
	printf("%d\n",p->num);
}

/*
   控制台显示不下,所以同时在D盘文件中写了一份,
   D盘的code.txt文件中
*/
void Traversal2() {  
	node *p;
	p = Linklist;	
	ofstream fout;
	fout.open("d:\\code.txt",ios::app);
	if(!fout) {
		return ;
	}
	while(p->next) {
		fout<<p->num<<"-->";
		cout<<p->num<<"-->";
		p = p->next;
	}
	fout<<p->num<<endl;
	cout<<p->num<<endl;
	fout.close();
}

int IsSearch(load * temp) {  // 查询当前点是否被遍历过,已经记录在链表中则遍历
	node * p;
	p = Linklist;
	while(p) {
		if(p->num == map[temp->x][temp->y]) {
			return 0; // 已经遍历过
		}
		p = p->next;
	}
	return 1;         // 没有遍历过
}

void DfsSearch(int x , int y) {
	int i;
	load *temp = (load*)malloc(sizeof(load));
	node *p , *q;
    // 判断当前点的八个方向的下一步坐标是否符合
	for(i = 0 ; i < 8 ; i++) {
		temp->x = x + dir[i].x;
		temp->y = y + dir[i].y;
		// 下一步的点是否还在map范围之内
		if((temp->x) >=0 && (temp->x) <=2 && (temp->y) >= 0 && (temp->y) <=2) {
			// 下一步的点是否已经走过
			if( IsSearch(temp) ) {
				// 没有遍历过则新建结点加入链表末尾,并遍历改点
				p = (node*)malloc(sizeof(node));
				p->num = map[temp->x][temp->y];
				p->step = end->step + 1;
				p->next = end->next;
				end->next = p;
				q = end;
				end = p;
				// 当前链表是否已经长度>=2,>=2则符合要求,遍历输出
				if((end->step) >= 2) {
					// Traversal();
					Traversal2();
				}
				// 以当前点为基准,使用深度遍历搜索
			 	DfsSearch(temp->x , temp->y);
				/*
				   退出递归,即以当前链表末尾点的情况都已经遍历
				   则删除当前链表末尾点,即删除末尾点的标记	
				*/
				end = q;
				end->next = NULL;
				free(p);
			} else {
			// 当前点已经遍历
			}
		}
	}
	free(temp);
    // 当前点的八个方向都已经遍历,则回退
}

int main() {
	node * p = (node*)malloc(sizeof(node));
	Linklist = NULL;
	int i , j , num = 1;
	// map地图的每个点开始为起点深度遍历搜索
	for(i = 0 ; i < 3 ; i++) {
		for(j = 0;j < 3; j++) {
			p->num = map[i][j];
			p->step = 1;
			p->next = NULL;
			// 第一个点作为链表的结点
			Linklist = p;
			end = Linklist;
			// 进行深度遍历
			DfsSearch(i , j);
		}
	}
	free(p);
	return 0;
}


手机9宫格锁屏方案个数计算 手机九宫格方案计算 阅读详情

相关推荐

【AI智能体】图像处理-生成营销 Banner 图

生成营销 Banner 图是一款用于制作营销图片的智能体,它可以根据指定的营销活动内容,快速生成活动 Banner 图片,降低活动运营成本、提高制图效率。

AI创变工坊,和1000万新个体创业者一起成长!愿大家都能跟上时代的洪流,不被社会淘汰,愿大家的生活工作收入都能具备竞争力! 1175

7-1 九宫格密码 (100 分)

随着智能手机的普及,各种应用也层出不穷,安卓的九宫格密码就是其中之一。安卓的九宫格密码可以看做是3×3点阵中的一条路径,只要你在画的时候,不经过重复的点,同时不跳过途中必须要经过的点,那么这条路径几乎是无所不能的。 现在就请你写一段程序将这条路经转换成相应的密码。我们这里做一个限制,就是在画这条路经时,从一个点到另一个点,无论是横向还是纵向每次最多移动一个格。也就是说如果我们按程序设计的习惯用(0,0)表示左上角的点,那么从它出发可能的移动只有三个,即可以移动到(0,1)、(1,0)和(1,1)三个点

mxc66的博客 6312

你不知道的Postman的Mock接口测试,看这一篇就够了

创建Mock服务你可以从Postman已有的测试集(Collection)中创建Mock Server或者直接创建Mock Server(我们这里选择从已有的测试集中创建Mock Server)Mock server详细配置页面,在此页面中我们可以设置:命名Mock Server选择一个环境(可选的),我们可以选择之前设置过的环境,Mock Server将会使用对应环境中设置过的变量在对应的请求和响应中如果想要将Mock Server设置私有访问的,那么可以勾选此选项,不勾选则对所有人可见。

654

九宫格手势密码

关于自定义控件已经了解过一些理论知识了,但是实际动手的次数实在是很少,最近下定决心开始动手实践。 下面就是对九宫格手势密码的具体实现做一个总结和说明,也为一些不知如何去实现的朋友提供一个思路首先大家来看一下用法:<com.example.customer.myapplication.weight.Lock9View android:layout_width="300dp"

wrm0013的专栏 2097

【Konva】解决图形加入group后无法获取到绝对坐标,以及group内绘制新图形坐标偏移的问题

解决konva绘图开发时“图形加入group后坐标不会变动,无法获取到绝对坐标”的问题

近10年前端开发工作经验,为你分享日常经验所得 1498

科研指南:IEEE期刊LaTeX/Word模板下载与使用全解析

本文详细解析了IEEE期刊LaTeX/Word模板的下载与使用技巧,帮助科研人员高效完成论文排版。从官方模板获取入口到LaTeX文档结构配置,再到Word样式管理与常见问题解决方案,全面覆盖投稿准备的关键步骤。特别针对数学公式、参考文献和图片处理等难点提供实用建议,助力学术写作规范化。

weixin_28396629的博客 565

手势密码

很多手机或平板电脑软件都可以设置手势密码,在设置了手势密码后,进入程序时,首先要输入手势密码。 手势密码最少选择4个点,最多选择9个点,理论上的密码组合总共有985824种,扣除掉其中不可能完成的组合(如一些点不允许绕过),最终的可能性是389112种。可见,手势密码加强了软件访问的安全性。 下面介绍一下手势密码的规则(如果你熟悉手势密码的规则,可略过): 1)  从某一个点出发,不间断地画

立志变成java巨头 4372

从NVLINK到EthLink:GPU互联技术演进全解析(含最新行业趋势)

本文深入解析了从NVLINK到EthLink的GPU互联技术演进,重点剖析了Scale-up与Scale-out两种核心范式。文章详细对比了NVLINK、UALINK及革命性的EthLink技术,后者创新性地将以太网改造为支持Load/Store与RDMA双语义的高性能互联网络,旨在打破封闭生态,实现高性能与开放性的统一。最后,文章提供了技术选型指南并展望了未来以以太网为主导、语义融合的行业趋势。

weixin_29204749的博客 176

九宫格手机解锁有多少种情况?

0、写在前面:本文的内容大概搬运自果壳和知乎的两篇文章,在结尾有注明参考。安卓手势解锁是安卓手机解除锁定的密码方案,究竟这种方式一定有多少种可能呢?这是本文要讨论的问题。1、问题定义问题很简单:安卓的手势解锁是3*3的点阵,在这个点阵上的解锁手势一共有多少种情况?这里一个合格的解锁手势轨迹必须满足以下两个条件: 至少连接点阵中的四个点。 手势的轨迹不能跨过一个还没有经过的节点。 不允许重复经过某个定

水逝流年 6891

【系统分析师】高分论文:论软件开发方法及应用(数据中心CMDB 系统)

【摘要】本文以作者负责的"数据中心CMDB系统"建设项目为例,探讨了系统分析和建模方法在IT项目中的应用实践。项目基于ITIL框架,旨在整合分散的配置信息,构建统一CMDB平台。通过分析结构化、面向对象和构件化三种开发方法特点,项目最终采用结构化分析与V模型结合的方式,并融入面向对象设计理念。系统经过4个月开发后上线,通过增量迭代满足不同数据源接口需求,采用适配器模式提高兼容性。经过2个月试点运行和优化,系统已稳定运行并获得用户认可,为后续IT服务管理集成奠定了基础。项目实施使作者积累了

数据知道的博客 4298

【系列06】端侧AI:构建与部署高效的本地化AI模型 第5章:模型剪枝(Pruning)

结构化剪枝移除的是模型中的整个结构,比如一个完整的神经元、一个卷积核或一个通道。修剪后的模型权重矩阵仍然是稠密的,因此能够充分利用现代硬件和软件的并行计算优势,从而显著提升推理速度。非结构化剪枝是最细粒度的剪枝方法。对于需要极致压缩但对推理速度要求不高的场景,非结构化剪枝是好的选择。它就像修剪一棵树,通过移除模型中不必要的“枝叶”,让模型变得更精简、更高效,从而适应资源受限的设备。,开发者可以方便地对模型的不同层进行剪枝,并根据需求进行微调,从而在不影响太多性能的前提下,获得一个更轻量、更高效的模型。

学习,输出==》再学习再输出 647

九宫怎么排列和使用_手机的九宫格图案解锁总共有多少种?

滑动解锁是智能手机一项常用的功能。你需要在3x3的点阵上,从任意一个点开始,反复移动到一个尚未经过的"相邻"的点。这些划过的点所组成的有向折线,如果与预设的折线在图案、方向上都一致,那么手机将解锁。两个点相邻当且仅当以这两个点为端点的线段上不存在尚未经过的点。此外,这条折线还需要至少经过4个点。总结起来,有以下三个点:1、最少四个点,最多九个点2、可以画斜线,但不能跳点,除非中间点已经使...

weixin_39679678的博客 5394

【基于 CasADi 的欠驱动无人船实时非线性模型预测控制(NMPC)实现 Visual Studio 2022 C++】

本文介绍了基于CasADi和IPOPT在Visual Studio 2022 C++环境下实现的欠驱动无人船实时非线性模型预测控制(NMPC)方案。文章详细阐述了NMPC基本原理、欠驱动无人船动力学模型(包含状态变量和控制变量定义),并给出了C++实现的核心代码框架。该方案通过显式引入系统动力学模型和约束条件,在每个采样周期滚动优化控制序列,有效解决了欠驱动无人船的轨迹跟踪与避碰问题。文中还提供了VS2022配置CasADi环境的详细步骤,包括预编译包下载、工程属性设置等关键环节,为工程实现提供了完整的技术

vor234的博客 650

手机九宫格密码总数

手机的九宫格图案解锁总共能绘出多少种图案?修改 需要满足的要求有: 至少经过四个点; 不能重复经过同一个点; 路径上的中间点不能跳过(如从1到3一定会经过2); 如果中间的点是之前已经用过的,那么这个点就可以被跳过(如213,因为2已经被用过,1就可以越过2与3连接,132是不允许的)。修改 举报21 条评论 分享 • 邀请回答 按投票排序 按时间排序 18 个回答 linkwun,知乎手机客

yiranlun3的专栏 2267

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

忘记手机密码怎么用计算机解开,手机忘记密码怎么办?教你三种方法帮你搞定!...

你一定有过手机忘记密码的经历吧?小编在就经常会把手机密码记错,这个时候十分的着急,试了一遍又一遍还是不对,那么,遇到手机忘记密码怎么办 ?今天在小编教你一招,轻松搞定。手机忘记密码怎么办  经过几年的发展,Android设备iPhone手机和大为流行,几乎人人都有一智能手机,肯定也会有人经常忘记密码,那么手机锁屏密码忘记了怎么办呢,小编也特别搜集了几个搞定手机密码忘记的方式和大家共享。首先,我们先...

weixin_35810012的博客 2万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

自定义 View 之实现九宫格锁屏效果

博主声明: 转载请在开头附加本文链接及作者信息,并标记为转载。本文由博主威威喵原创,请多支持与指教。 本文首发于此 博主:威威喵|博客主页:https://blog.youkuaiyun.com/smile_running Android 锁屏功能是我们最常用的、最经常接触的一个软件之一了吧,因为我个人也是使用的 Android 手机,虽然手机不怎么好,但是也有锁屏这个功能。...

你若盛开,蜜蜂自来 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

九宫格(安卓手机的图形锁有几种解锁图案)

为了写好那个递归,我琢磨了好长时间 改好了最后一个bug之后突然有点小激动。 上代码: #include #include #include #include                //  ______  //                                                             //

常回家看看 8515

如何用计算机解开op手机密码,OPPO手机忘记解锁密码怎么办 OPPO R9忘记解锁密码解锁教程...

OPPO手机忘记解锁密码怎么办?很多时候因为自己的粗心大意,忘记了手机屏幕解锁密码,导致无法进入系统,进而无法正常使用手机。下面,本文以OPPO R9为例,教大家忘记了PIN解锁码或九宫格图案锁密码的解决办法。方法一:双清(这种方法会导致个人数据丢失,双清之前,需要确保备份过数据或者手机中无重要数据)首先将OPPO手机关机,然后进入Recovery模式,Recovery模式下使用音量键移动,电源键...

weixin_35102377的博客 1万+

网易笔试题-九宫格密码

一 问题描述: 九宫格,就是手机手势密码。有三问,一问是如果只设置2位密码,有多少种满足的密码,密码不能穿越,比如1 3之间穿过2,这是不允许的;第二问,如果变成N*M格,判断一个2位密码是否是满足要求的密码(要求同1),第三问,如果设置密码位数为9位,有多少种合适的密码,给出算法思路,并给出伪代码。

开发分享交流 1744

手机九宫锁的组合问题

安卓手机的屏幕锁是3*3的9点矩阵。相邻的点可以用一条直线连接,但每个点不可以重复连接。如果必须连接4个点(含4个点)以上才是一个有效的形状,一共有多少种形状组合?

zhu418766417的专栏 1130

Html5实现手机九宫格密码解锁功能

HTML5真的是很强大,前端时间看到一个canvas实现九宫格的密码解锁。 效果截图如下: 效果看起来还不错吧! 源码如下: html5实现网页解锁功能 html, body { ma

LateChangce的博客 1179

python破解手机锁屏密码_手机屏幕解锁模式

36可以通过DFS的方式先计算出刚好按下n个键时有多少种组合,然后求出S[n]至S[M]的和。DFS的主要难度在于,下一步可以与当前的位置不直接相连。这时分两种情况:1. 普通的八个方向 (上下左右以及其45度夹角方向):若这八个方向都已经越界或走过了,则这时无路可走。若是普通的DFS则返回,但是九宫格解锁可以跳过相邻的一格。注意只能在这八个方向跳多一步,相当于踩着已经被按下的位置再沿着相同方向走...

weixin_33070823的博客 5883

html5手机密码修改,js+html5实现手机九宫格密码解锁功能

HTML5真的是很强大,前端时间看到一个canvas实现九宫格的密码解锁。今天抽出时间模仿了一个,特定分享一下!效果截图如下:效果看起来还不错吧!源码如下:html5实现网页解锁功能html, body {margin: 0;padding: 0;width: 100%;height: 100%;}/*** 半径,画布宽度,画布高度,画布x内边距,画布y内边距*/var R = 26, canva...

weixin_42452892的博客 656

Auto.js 九宫格解锁、密码解锁

auto.js使用九宫格滑动解锁,输入密码解锁

qq_21834419的博客 5500

如何破解安卓手机上的图形锁(九宫格锁)

http://mobile.51cto.com/iphone-441496.htm 安卓手机的图形锁(九宫格)是3×3的点阵,按次序连接数个点从而达到锁定/解锁的功能。最少需要连接4个点,最多能连接9个点。网上也有暴力删除手机图形锁的方法,即直接干掉图形锁功能。但假如你想进入别人的手机,但又不想引起其警觉的话……你可以参考一下本文。 前提条件:手机需要root,而且打开调试模式。一...

weixin_34161032的博客 1826
上一篇: 在Eclipse中使用user library创建自己的库
下一篇: Java反射机制初探
java_wliang
博客等级 码龄15年 19粉丝 82原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值