数独游戏 link



判断重复
数独要求每一行、每一列、每一个3×3方阵内的数字,不重复。

行和列重复判断是相当简单的。
我们可以定义两个bool型二维数组,
当此行(或列)填充数字时,
我们可以直接把这行的这个数字打上true表示有数字了。

//譬如第一行第三列填入数字2
bool p[][],l[][];//p:行,l:列;
p[1][2]=l[3][2]=true;

如果后面再填充数字,就判断此行(或列)是否填过这个数字即可。

重点:判断方阵中数字重复
如果判断方阵中数字重复?
怎样用行列来表示是几方阵成了个问题。
但是不用怕,我们有van能的数学。

观察下面这个数独:


可以看到,每过3列,方阵的序号+1,
每过3行,方阵的序号+3。

于是我们有了这样的表达式:

方阵序号=(行数-1)/3*3+(列数-1)/3+1
//注意!行数列数要-1,因为3的整数倍数/3会比原方阵大1,不能满足上述需求。

有了上述方法,就可以写个深搜函数来解决问题了!

#include <cstdio>
#include <iostream>
#include <cstdlib>using namespace std;const int N = 20;
char s;
int ans[N][N], h[N][N], l[N][N], g[N][N];int solve(int x, int y) {return (x - 1) / 3 * 3 + (y - 1) / 3 + 1;}void print()
{for(int i = 1; i <= 9; i++){for(int j = 1; j <= 9; j++)printf("%d",ans[i][j]);printf("\n");}exit(0);
}void dfs(int x, int y)
{if(ans[x][y]){if(x == 9 && y == 9) print();else if(y == 9) dfs(x + 1, 1);else dfs(x, y + 1);return ;}for(int i = 1; i <= 9; i++){if(!h[x][i] && !l[y][i] && !g[solve(x, y)][i]){ans[x][y] = i;h[x][i] = l[y][i] = g[solve(x,y)][i] = 1;if(x == 9 && y == 9) print();else if(y == 9) dfs(x + 1, 1);else dfs(x, y + 1);ans[x][y] = 0;h[x][i] = l[y][i] = g[solve(x,y)][i] = 0;}}
}int main()
{freopen("sudoku.in", "r", stdin);freopen("sudoku.out", "w", stdout);for(int i = 1; i <= 9; i++){for(int j = 1; j <= 9; j++){cin>>s;int t = s - '0';if(t >= 1 && t <= 9) h[i][t] = l[j][t] = g[solve(i, j)][t] = 1, ans[i][j] = t;}}dfs(1, 1);return 0;
}

YBTOJ 入门到进阶模拟赛 Day2 数独游戏相关推荐

  1. 【ybt 入门到进阶模拟赛 Day2 T4】数独游戏

    数独游戏 题目链接:ybt 入门到进阶模拟赛 Day2 T4 题目大意 就要你填一个数独,保证有唯一解. 思路 直接暴力 dfs,不用剪枝优化都可以过. 代码 #include<queue> ...

  2. 嗨CE系列教程全套(入门,进阶,高阶)游戏驱动反调试

    嗨CE系列教程全套(入门,进阶,高阶)游戏驱动反调试等 1.入门教程5课 1.如何修改游戏 2.快速找到基址和指针 3.通过一个地址快速找到其他地址 4.制作一个简易修改器 5.一些重要的小技巧和理论 ...

  3. CH Round #55 - Streaming #6 (NOIP模拟赛day2)解题报告

    T1九九归一 描述 萌蛋在练习模n意义下的乘法时发现,总有一些数,在自乘若干次以后,会变成1.例如n=7,那么5×5 mod 7=4,4×5 mod 7=6,6×5 mod 7=2,2×5 mod 7 ...

  4. YbtOj#20073. 「NOIP2020 模拟赛 B 组 Day6」钻石守卫

    文章目录 ResultResultResult HyperlinkHyperlinkHyperlink DescriptionDescriptionDescription SolutionSoluti ...

  5. 【洛谷】NOIP提高组模拟赛Day2【动态开节点/树状数组】【双头链表模拟】

    U41571 Agent2 题目背景 炎炎夏日还没有过去,Agent们没有一个想出去外面搞事情的.每当ENLIGHTENED总部组织活动时,人人都说有空,结果到了活动日,却一个接着一个咕咕咕了.只有不 ...

  6. LYDSY模拟赛day2 Divisors

    /* 注意分解质因数,如果i是,那么n/i也是,这样就可以解决分解质因数的时间问题了 当 k ≥ 1 时,只有这些数的约数才会对答案产生贡献. 求出 m 个数的所有不超过 n 的约数,去重后统计即可. ...

  7. 【2018.10.18】noip模拟赛Day2 地球危机(2018年第九届蓝桥杯C/C++A组省赛 三体攻击)...

    题目描述 三体人将对地球发起攻击.为了抵御攻击,地球人派出了 $A × B × C$ 艘战舰,在太 空中排成一个 $A$ 层 $B$ 行 $C$ 列的立方体.其中,第 $i$ 层第 $j$ 行第 $k ...

  8. android 手机九宫格解锁实验报告,Android数独游戏实验分析报告.pdf

    本科生实验报告 实验课程 Android 课程设计数独游戏 学院名称 信息科学与技术学院 专业名称 物联网工程 学生姓名 学生学号 指导教师 实验地点 实验成绩 二〇一五 年 十 月 二〇一五 年 十 ...

  9. 数学建模系列:历年优秀论文+入门+进阶+国赛+美赛+其他

    数模系列:历年优秀论文+入门+进阶+国赛+美赛+其他(待更新中) 数模成绩为国二\省一\o奖\H奖,在博客做一个总结.先放国赛美赛的历年优秀论文,资料来源微信公众号数学模型.(目前完成部分:入门+进阶 ...

最新文章

  1. 使用BabeLua3.x在cocos2d-x中编辑和调试Lua
  2. Qt学习(七):定时器QTimer
  3. crs 管理的几个演示(培训作业)
  4. 在同一个机器上布署两个JBOSS,要修改那些端口?
  5. 阿里巴巴Maven仓库配置
  6. python把矩阵堆叠成大矩阵_python numpy 矩阵堆叠实例
  7. Win10显示此应用无法在你的电脑上运行 此应用无法在你的电脑上运行处理办法
  8. 【无标题】写博客的第一天
  9. 编程实现提取点云数据的树的中心和提取山区的DEM
  10. pta冒泡排序c语言_PTA 冒泡排序
  11. 大数据第三季--spark(day1)-徐培成-专题视频课程
  12. C# 命名空间中不存在类型或命名空间名,是否缺少程序集引用
  13. waf指纹识别工具WAFW00F的使用
  14. 单因子方差分析Python实现(小鸡增肥)
  15. 计算机u盘病毒清除方式,U盘如何格式化和清理病毒
  16. android rn动态技术,ReactNative入门之android与rn初始化参数的传递
  17. 相关性分析热点图_防老剂TMQ及6PPD价格上涨逻辑分析及后市展望
  18. php微信端获取头像不显示不出来,解决微信转发到朋友圈没有获取页面头像以图标展示。...
  19. 郑州大学计算机硕士分数线,2021郑州大学考研复试线:热门专业超过400分,机械类专业仅263分...
  20. 【技术贴】全盘文件夹快捷方式 杀毒后快捷方式消失,但文件夹打不开。重装系统后还是快捷方式的解决办法。...

热门文章

  1. 【软件工程】5 ATM系统测试
  2. 河南工程学院OJ郑州轻工业学院OJ代码(C语言)
  3. pygame 生成文字
  4. 2019养老产业政策全解读:2019年,中国养老元年丨60加养老观察
  5. PDF转图片,合并后加水印
  6. bugku 简单套娃
  7. jsp星星艺术家插画管理系统
  8. Executors四大线程池工厂方法的使用
  9. 使用python语言通过tcp控制优傲机械臂
  10. 开发完成不是最终结果,怎样完成优化?