网易笔试题-九宫格密码

转自:

www.cnblogs.com/shoker/p/3998270.html

一 问题描述:

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

二 算法思路

分析一下九宫格如下图所示

1   2   3

4   5   6

7   8   9

不难看出,可以把所有点分成三类:

1 3 5 9为一类,2 4 6 8 为一类,5单独为1类。

第一类点,任意2点都不能互联,但是如果两点之间的已经用过,这时是可以互联的,这点一定要注意。

第二类点,2 8 是不能直接连的,4 6也是不行的,但是如果5已经用过,它们就变成可以连接的点了。

第三类点只有5一个,它与所有点之间都是可以直接连的。

 

求全排列的算法,网上有2中,一种是递归算法,另一种是非递归算法。不清楚的请百度之,博客园里也已经有很多大牛写过博客了,不再赘述。

我采用的是简单的递归算法,一是思路比较清晰,也好理解。并且此题深度不大,只有9,故DFS是可以的。

 三 代码验证:

直接贴出代码截图吧:


四 试验结果

打印的结果太多,不显示了:

只贴出最后的解决方案总数:

389112

截图如下:



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值