[数据结构 & 算法] 2016年第七届蓝桥杯C/C++A组第三题---方格填数

在练习算法的时候,看见了这个题,利用递归回溯的方法,解开了这个题

问题描述:

方格填数


如下的10个格子




填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)


一共有多少种可能的填数方案?


请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

以上就是问题的描述,第一感觉是枚举,但是想想,枚举可能超时,而且不好写,进而转变为其他的思路。

我们可以将这个问题分解为规模更小的子问题。例如已经填好了k个格子,在k个格子的基础上,我们进行处理问题,这样很容易就想到了递归的方法。

我们首先将格子规范化为下图这样

这样做的好处是,在判断当前数字和周围数字是否相邻的时候,可以采取统一的操作,即遍历以其自己为中心的9个方格,当然在遍历到其自身的时候跳过。

多增加的格子里的数字和所填的数字始终不会相邻,这样就不会对结果造成影响,而且可以规范判断时的操作。

以下是完整代码,

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值