后来隐约感觉计算结果有点小問题,但是又没有深入去研究它直到最近看到对这个问题感兴趣的朋友比较多,因此傅老师打算就做一个“标准”答案出来
安卓手机⑨宫格是标准的轴对称和中心对称图形,因此在分析特点的时候只考察它的一个角就可以了
在不穿越点的情况下,任意连接九宫格的两點我们可以有以下3种画法:
如果穿越一个点,任意连接九宫格的两点我们可以有以下两种画法:
注意:在这种情况下,穿越的一点必須是已经被使用过的
综合以上分析,九宫格任意两点间的距离只能有5种结果:
下面我们来看看手绘解锁图案的方法:至少4个点最多9个點,一笔画完不能穿越空白点,但是可以穿越已经使用过的点(如前述图2)显然解锁图案是有方向性的。
我们来模拟一下算法: 1、从9個点中不重复地任取n个点D(x,y)(x,y为坐标4≤n≤9)做全排列P,将这些点顺序装入数组Arr;
2、计算数组Arr中所有相邻两点间(D
k,
D
k+1)的距离如果距离为1、√2或者√5则为合法连接;如果距离为√8或者2则计算该两点的中点坐标D
m(x,y),然后检验中点D
m是否已经出现在数组Arr中D
k点之前若是则为合法连接,若不是則为非法连接(可以通过算距离的方法得出)
3、我们只需数重循环计算上述“合法连接”的个数即可到我们要的结果。
连接4点的解锁图案:1624种
连接5点的解锁图案:7152种
连接6点的解锁图案:26016种
连接7点的解锁图案:72912种
连接8点的解锁图案:140704种 (559秒)
连接9点的解锁图案:140704种 (5325秒)
(当嘫程序显然还可以进一步优化以获得更高效率)
——本文最后由傅老师于编辑过