题目描述

小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中,使得每一行、每一列和每一条对角线的和都是相同的。

三阶幻方又被称作九宫格,在小学奥数里有一句非常有名的口诀:“二四为肩,六八为足,左三右七,戴九履一,五居其中”,通过这样的一句口诀就能够非常完美的构造出一个九宫格来。

4 9 2
3 5 7
8 1 6

有意思的是,所有的三阶幻方,都可以通过这样一个九宫格进行若干镜像和旋转操作之后得到。现在小明准备将一个三阶幻方(不一定是上图中的那个)中的一些数抹掉,交给邻居家的小朋友来进行还原,并且希望她能够判断出究竟是不是只有一个解。

而你呢,也被小明交付了同样的任务,但是不同的是,你需要写一个程序~

输入格式:

输入仅包含单组测试数据。
每组测试数据为一个3*3的矩阵,其中为0的部分表示被小明抹去的部分。
对于100%的数据,满足给出的矩阵至少能还原出一组可行的三阶幻方。

输出格式:

如果仅能还原出一组可行的三阶幻方,则将其输出,否则输出“Too Many”(不包含引号)。

样例输入

0 7 2
0 5 0
0 3 0

样例输出

6 7 2
1 5 9
8 3 4


思路分析

几种分析思路

暴力法

一般采用多重循环或全排列来进行暴力枚举, 但暴力枚举的前提一般是已给限定条件后才能执行。 对本题来说,限定条件多变,实现复杂,放弃。

搜索法

常规的搜索模板即可。


代码展示

#include<bits/stdc++.h>
using namespace std;int a[15] = {0,1,2,3,4,5,6,7,8,9};
int b[15];      //保存最终答案
int vis[15];int num = 0;   //num为边界条件
int sum = 0;   //记录满足条件的矩阵个数void dfs(int step) {if(step == 9) { //连等只能用于赋值, 至于为什么,仔细想想原理 if( (a[3]+a[1]+a[2])==15 && (a[6]+a[4]+a[5])==15 && (a[9]+a[7]+a[8])==15 && (a[9]+a[3]+a[6])==15 && (a[2]+a[5]+a[8])==15 && (a[1]+a[4]+a[7])==15 && (a[1]+a[5]+a[9])==15 && (a[3]+a[5]+a[7])==15 ) {sum++;for(int i = 1; i <= 9; i++) b[i] = a[i];}}else for(int j = 1; j <= 9; j++) if(a[j] == 0) {for(int i = 1; i <= 9; i++) if(!vis[i]) {vis[i] = 1;a[j] = i;dfs(step+1);vis[i] = 0;a[j] = 0;}return;}
} int main() {for(int i = 1; i <= 9; i++) {int x; cin>>x;if(x != 0) { vis[x] = 1; a[i]=x; num++;} }dfs(num);if(sum == 1) for(int i = 1; i <= 9; i++) {cout << b[i] << ' ';if(i==3 || i==6 || i==9) cout << '\n';}else cout << "Too many" << '\n';
return 0; }

感想与总结

1、蓝桥杯的绝大多数题都是搜索或暴力,而近两年纯暴力的题越来越少,取而代之的是模拟+搜索或暴力+搜索

2、本题就是一道非常标准的 模拟+搜索 类型题。 关于暴力+搜索,可参考2016年B组7题的剪邮票, 也很经典, 题目+题解,传送门

3、对于对称类型的题, 一定要考虑是否有重复的情况出现。


把手举过头顶,突然张开五指,那么,恭喜你给自己放了个烟花!

【解题报告+通法】_九宫幻方 蓝桥杯 2017年C组第八题(dfs解法)相关推荐

  1. 16行代码AC_蓝桥杯 2017年C组第三题 算式900(暴力解法+DFS解法)

    励志用更少的代码做更高效的表达 题目描述: 小明的作业本上有道思考题: 看下面的算式: (□□□□-□□□□)*□□=900 其中的小方块代表0~9的数字,这10个方块刚好包含了0~9中的所有数字. ...

  2. 【已解决】蓝桥杯 2017年C组第五题 杨辉三角(分析与总结)

    励志用少的代码做高效表达 题目描述: 杨辉三角也叫帕斯卡三角,在很多数量关系中可以看到,十分重要. 第0行: 1 第1行: 1 1 第2行: 1 2 1 第3行: 1 3 3 1 第4行: 1 4 6 ...

  3. 暴力优化解法+哈希解法——2016年第七届蓝桥杯省赛b组第八题 四平方和

    Problem describe 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和. 如果把0包括进去,就正好可以表示为4个数的平方和. 比如: 5 = 0^2 + 0 ...

  4. 复数幂用java程序怎么求_蓝桥杯——复数幂 (2018JavaAB组第3题)

    18年Java蓝桥杯A组第3题和B组是一样的. 第三题往往比较难. 复数幂 (18JavaAB3) (A.B两卷第三题一样) 设i为虚数单位.对于任意正整数n,(2+3i)^n 的实部和虚部都是整数. ...

  5. 蓝桥杯java组多少分能拿奖_记 2019蓝桥杯校内预选赛(JAVA组) 赛后总结

    引言 好像博客好久没更新了 哈哈哈哈哈 趁现在有空更新一波 不知道还有没有人看 确实该记录一下每天做了什么了 不然感觉有些浑浑噩噩了 比赛介绍 全称: 蓝桥杯全国软件和信息技术专业人才大赛 蓝桥杯 实 ...

  6. 2020年第11届蓝桥杯省赛Python组(真题+解析+代码):数字三角形

    大家好,我是爱分享的小蓝,欢迎交流指正~  1 真题 输入 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 输出 27 2 解析 难度系数:⭐⭐ 考察题型:动态规划 涉及知识点:模块 ...

  7. 【蓝桥杯练习】B组结果填空题13-18------更新中

    [2013年B组] 2.标题: 马虎的算式     小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了. 有一次,老师出的题目是:36 x 495 = ? 他却给抄成了:396 x 45 = ...

  8. 2018年第九届蓝桥杯国赛B组C++真题汇总

    1. 换零钞 x星球的钞票的面额只有:100元,5元,2元,1元,共4种. 小明去x星旅游,他手里只有2张100元的x星币,太不方便,恰好路过x星银行就去换零钱. 小明有点强迫症,他坚持要求200元换 ...

  9. 21行代码AC_标题 Excel地址 2017年蓝桥杯真题(解题报告+通法)

    励志用更少的代码做更高效的表达 题目描述 Excel单元格的地址表示很有趣,它使用字母来表示列号. 比如, A表示第1列, B表示第2列, Z表示第26列, AA表示第27列, AB表示第28列, B ...

最新文章

  1. oracle rodo 查看大小,Checkpoint not complete故障
  2. 神经网络的物理学解释(一)---权重与概率幅
  3. 你绝对能懂的“机器学习”(一)
  4. centos中bash占用cpu_Docker 多种维度限制容器可用的 CPU
  5. 八十七、CSS水平垂直居中的布局方式
  6. zabbix模板_基于zabbix网页配置自定义tomcat监控模板--监控项、触发器
  7. scala中的集合框架
  8. 【硬件工程师】元器件选型都不会?
  9. DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL过程
  10. 微信小程序无法获取头像,昵称的解决办法 (原生)
  11. html中鼠标点击效果的制作,用CSS实现鼠标单击特效-网页设计,HTML/CSS
  12. 游戏光枪坐标定位原理及算法
  13. 如何增加你微博的粉丝人数?微博推广20绝招
  14. OpenGL中关于矩阵缩放、平移、旋转的讲解
  15. Codeforces 718E.Matvey's Birthday dp+状态压缩
  16. 一步一步教你写股票走势图——K线图四(高亮联动一)
  17. 马斯克最新访谈全文,信息量极大,远见令人震撼
  18. 易通文件夹锁免费版 v4.5.8.06
  19. 【SSH网上商城项目实战22】获取银行图标以及支付页面的显示
  20. mysql 1326_mssqlserver无法远程数据库Error: 1326错误解决方法

热门文章

  1. 大润发优鲜app之paramsMD5参数分析
  2. Java集合框架:Arrays工具类
  3. 使用Webrtc和React Js在网络上共享跨平台的点对点文件
  4. 探索多媒体开发最新最佳实践,我们在深圳等你
  5. 腾讯TDSQL提出三个“数据库之问”,数据库技术未来重点在哪?
  6. Nginx:HTTP框架是如何介入请求
  7. nginx 知识点 :ctx_index and index
  8. Gitlab创建第一个项目
  9. 使用bootstrap按钮组并设置其按钮组中按钮的尺寸和距离
  10. 今日的你,上班了吗?