九宫格问题优化

课上老师留了个九宫格问题,今天把我的心得记录下,希望能和诸君相互学习

九宫格问题:

正常用枚举法会很麻烦,需要计算9!次,而且每次都要有各种判断,及其繁琐,下面给出我的优化及解法:

1、如图所示,设1-9个格子所填数据为a1至a9,设每列,每行,斜着的和为x

则三行相加为:3x=a1+a2+……+a9=1+2+……+9=45,所以x=15,即每一行、每一列、斜着的和均为15;

2、第二行、第二列、两个斜方向相加为:4 * 15=a1+a2+……+a9+3*a5=45+3*a5,即a5=5;中间数必是5;

3、设a1=i;a2=j;a3=k;a4=l;因为a5=5,则由涉及到a5的行列斜可计算:a6=10-l;a7=10-k;a8=10-j;a9=10-i;那么进行判定

的时候凡是涉及a5的均可以不考虑了;

4、计算可知行a1+a2+a3与a7+a8+a9是重复的,本质上都是i+j+k=15;同理列a1+a4+a7与a3+a6+a9也是重复的,均可

化为i+l+10-k=15;最后只要判定这两个条件相等即可。

5、注意:每个数字不能相等,即i,j,k,l10-i,10-j,10-k,10-l均不相等且不等于5;

6、优化,现在的计算次数为8*7*6*5,但是i<5的时候10-i为大于5的情况,两个是对称的没必要再计算,只需要算出i<5

的情况再倒过来就是两种情况,这样计算次数为4*7*6*5;

7、代码如下图

结果是

不知道大家发现没有,虽说是有八种,但是出去中心变换,即倒着打印的四种还只剩下四种,而有趣的是剩下四种也不是

纯粹的四种,第三个是第一个行变成列,在矩阵上叫做转置,第五个又是第一个的第三行和第一行交换,而第七个又是第

五个的转置,所以本质上来说其实只有一种。是不是有些意思?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值