YBTOJ 入门到进阶模拟赛 Day2 数独游戏

这篇博客介绍了数独游戏中如何判断行、列及3×3方阵内的数字重复,重点讲述了如何通过数学方法确定方阵序号,并利用深搜解决数独问题。
摘要由CSDN通过智能技术生成

数独游戏 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[
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值