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

滑动解锁是智能手机一项常用的功能。你需要在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);
}

结果:

时间: 2024-08-29 22:28:34

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

用状压DP计算手机上九宫格的解锁方案数

首先有两个限制条件: 1. 至少经过四个点. 2. 从一个点到另一个点,如果它们的连线上经过另外一点,如果这个点还没走过,那么必须经过,否则可以跳过这个中间点. 不熟悉限制条件的话可以自己去尝试一下--- 状态数很少只有2^9,所以直接用状压DP搞起-- dp[i][state]表示在状态state的情况下,最后停在节点i上的方案数,其中state是个二进制数,1表示这个位置的点已经过,0表示没有经过,那么状态转移方程是: dp[j][state|(1<<j)]+=dp[i][state] 表

打印出五种图案

while (true)                                                                                   //迭代    要找出规律   看图形各行与各行 ('' "),( "☆")之间的规律            {             Console.Write("请选择您想要得到的图形?A正方形:B三角形:C平行四边形:D菱形:E梯形:");           

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

图案解锁是智能手机一项常用的功能.你需要在3x3的点阵上,从任意一个点开始,反复移动到一个尚未经过的"相邻"的点.这些划过的点所组成的有向折线,如果与预设的折线在图案.方向上都一致,那么手机将解锁.两个点相邻当且仅当以这两个点为端点的线段上不存在尚未经过的点.此外,这条折线还需要至少经过4个点. 有些人可能有和我一样的疑问,在这小小的9个点中,图案密码总共有多少种形式呢?今天我就使用深度优先搜索的方法解决这个问题.具体c++代码如下: #include<iostream>

关于三星手机SPH-D710图案解锁过多导致手机锁死的问题

前一段时间由于手机充电被小孩子玩,导致屏幕锁死的状态,然后出现要用谷歌帐户来解屏,但是试了后还是不行,不是很懂这些东西,以为坏了.最后到网上查了查,说要重新刷机什么的,权威的方法就是要恢复出厂设置,于是在网上找了一些方法试,最后就可以了. 首先按住手机的音量加和HOME键还要按住关机键(要保证你的手机处于关机状态),然后就会出现很多行英文模式,用音量键选择第一个WIPE开头的,按开关机键确认,会出现很多个no,但是只有一个yes,用音量键选择那个yes,再按home键确认:再选择第二个wipe开

Android进阶之自定义View实战(二)九宫格手势解锁实现

一.引言 在上篇博客Android进阶之自定义View实战(一)仿iOS UISwitch控件实现中我们主要介绍了自定义View的最基本的实现方法.作为自定义View的入门篇,仅仅介绍了Canvas的基本使用方法,而对用户交互层面仅仅处理了单击事件接口,在实际的业务中,常常涉及到手势操作,本篇博客以九宫格手势解锁View为例,来说明自定义View如何根据需求处理用户的手势操作.虽然九宫格手势解锁自定义View网上资料有很多,实现原理大同小异,但这里我只是根据自己觉得最优的思路来实现它,目的是让更

APP九宫格滑动解锁的处理

写手机自动化测试脚本关于APP九宫格滑动解锁方面采用了appium API 之 TouchAction 操作. 先是用uiautomatorviewer.bat查询APP元素坐标: 手工计算九宫格每个点中心的坐标及偏移的相对位移: 实现代码如下:(相对位移无负数不会报错,有负数时会报错) TouchAction(self.driver).press(x=300,y=750).wait(1000) \ .move_to(x=576,y=0).wait(100) \ .move_to(x=-576,

Android中图案解锁的设计原理和实现过程

Android中图案解锁 首先要理解图案的实现原理,上一张图: 由上图,可以看出,图案中手势的记录是1-9或0-8的,保存的顺序就是密码,当然有些是可以重复的,为了安全,肯定不能直接存原顺序,一定是要加密处理的,如MD5或Hash散列. (作者: a day a better) 图案解锁中自定义View,是其中最为关键的一部分.下面是自定义LockView的实现,里面的注释写的很详细了. <span style="font-size:14px;">package com.e

Android Lock Pattern 图案解锁

参考链接:http://www.cnblogs.com/dyingbleed/archive/2012/12/03/2800007.html http://blog.csdn.net/way_ping_li/article/details/8925936 Android Lock Pattern 图案解锁,码迷,mamicode.com

[Android UI]android-lockpattern图案解锁的实现分享

本文属于学习分享,如有雷同纯属巧合 怎么会有雷同呢? 本着技术分享,学习互助的原则,我在此分享一款已经开源的android 图案解锁的实现. 项目地址:https://code.google.com/p/android-lockpattern/  (考虑到要翻墙,才写了这个demo) 它也是参考了android自带的图案锁的源码而修改的,可以作为app来调用. 先看看实现效果吧! 开始说说这个demo的结构吧,首先下载源码,把android-lockpattern作为lib来使用 1.创建dem