数独检查

数独检查数独检查题目来源 acwing 题库题目地址 https www acwing com problem content 705 题目描述 数独是一种流行的单人游戏 目标是用数字填充 9×9 矩阵 使每列 每行和所有 9 个非重叠的 3×3 子矩阵包含从 1 到 9 的所有数字 每个 9×9 矩阵在游戏开始时都会有部分数字已经给出 通常有一个独特的解决方案 给定完成的 N2 N2 数独矩阵 你的任务是确定它是否是有效的解决方案 有效的解决方案必须满足以下条件 每行包含从 1 到 N2 的每个数字 每个数字一次 每列包含

数独检查

题目来源:acwing题库
题目地址:https://www.acwing.com/problem/content/705/

题目描述:
数独是一种流行的单人游戏。

目标是用数字填充9×9矩阵,使每列,每行和所有9个非重叠的3×3子矩阵包含从1到9的所有数字。

给定完成的N2∗N2数独矩阵,你的任务是确定它是否是有效的解决方案。

有效的解决方案必须满足以下条件:

输入格式
第一行包含整数T,表示共有T组测试数据。

每组数据第一行包含整数N。

接下来N2行,每行包含N2个数字(均不超过1000),用来描述完整的数独矩阵。

输出格式
每组数据输出一个结果,每个结果占一行。

结果表示为“Case #x: y”,其中x是组别编号(从1开始),如果给定矩阵是有效方案则y是Yes,否则y是No。

数据范围
1≤T≤100,
3≤N≤6
输入样例:
3
3
5 3 4 6 7 8 9 1 2
6 7 2 1 9 5 3 4 8
1 9 8 3 4 2 5 6 7
8 5 9 7 6 1 4 2 3
4 2 6 8 5 3 7 9 1
7 1 3 9 2 4 8 5 6
9 6 1 5 3 7 2 8 4
2 8 7 4 1 9 6 3 5
3 4 5 2 8 6 1 7 9
3
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
3
5 3 4 6 7 8 9 1 2
6 7 2 1 9 5 3 4 8
1 9 8 3 4 2 5 6 7
8 5 9 7 6 1 4 2 3
4 2 6 8 999 3 7 9 1
7 1 3 9 2 4 8 5 6
9 6 1 5 3 7 2 8 4
2 8 7 4 1 9 6 3 5
3 4 5 2 8 6 1 7 9




































































输出样例:
Case #1: Yes
Case #2: No
Case #3: No






我看了很多大佬的题解,看得我眼花缭乱,所以我想来给大家介绍一种简单易懂的方法哈!

数独游戏的特征就是每行每列,从1~n*n每个数字都只会出现一次,否则那就是错误的,所以我们就抓住这个特性,利用一种特殊的方式(好像类似于哈希,但是我没学哈希,自己想出来的方法)来解决这个问题。我们先开一个额外的数组f[N][N],先初始化为0,然后我们输入每个数据,让每个数据所在的行与列 对应的位置都加上1(比如第一行第一列的数是9,那么我们就让第一行和第一列对应的额外开的数组+1,即f[1][9]+=1,f[9][1]+=1,再比如第二行第三列的数字是8,那么就是f[2][8]+=1,f[8][3]+=1),对于每个数字都完成这样的操作以后,那么我们就可以对额外开的数组进行判断。

如果额外开的数组中,每个数字都是2,那么说明这个数独是正确的(为什么是2呢?因为一个数会影响其所在的行和列,所以行和列都会+1,所以结果应该大家都是2),如果出现不是2的,那儿么这个数独就是错误的,因为它要么就是少出现了,要么就是多出现了,都不行。所以通过这种简单易懂的方法,我们就可以解决这个题目。(因为我也是小白,看到那些大佬的解法吓我一条,所以我就自己想出了一种解法,我觉得是比较好理解的)

如果还有不太明白的同学可以带着代码一起看看,应该就可以明白了。

下面是AC代码+注释

#include 
    //个人觉得这个代码虽然看起来不简单,但是特别容易理解,大家稍微认真理解一下就看懂了 using namespace std; const int N = 1100; int f[N][N] = { 
   };//先初始化为0 int a[N][N]; int t, n; int ans = 0; int main() { 
    scanf("%d", &t); while (t--) { 
    int k = 0; ans++; scanf("%d", &n); for (int i = 1; i <= n * n; i++) for (int j = 1; j <= n * n; j++) f[i][j] = 0;//每次都要将其清除为0,不然就会影响后面的结果,导致出错 for (int i = 1; i <= n * n; i++) for (int j = 1; j <= n * n; j++) { 
    scanf("%d", &a[i][j]); f[i][a[i][j]]++;//让所在行对应的位置++ f[a[i][j]][j]++;//让所在列对应的位置++ } for (int i = 1; i <= n * n; i++) for (int j = 1; j <= n * n; j++) { 
    if (f[i][j] != 2)//如果有出现不等于2的,直接退出 { 
    k++;//这个k是用作判断作用,当然也可以不需要K,可以考虑简化,如果不满足条件,那么k++,退出 break; } } if (k)//结合k的大小进行输出结果 printf("Case #%d: No\n", ans); else printf("Case #%d: Yes\n", ans); } return 0; } 

本来是在acwing上写的一篇题解,然后我每天都要写一篇博客嘛,然后偷个懒,就转过来了,是自己原创的哦!

好了,这个题目就讲到这里啦!

每篇博客后面都附上一句话。

是不是卑微到连她回你一个信息,你都可以开心一整天。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220766.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午7:42
下一篇 2026年3月17日 下午7:42


相关推荐

  • 学成在线源代码(学成网首页代码)

    首先同一目录下放置三个文件夹(imagesxxx.htmlstyle.css)图片:头部区域分四个模块:logo(图片)导航栏(无序列表)搜索(文本输入框、button按钮)用户(图片)<divclass=”headerw”><!–logo部分–><divclass=”logo”><!–alt显示未加载时,所提示的文字,title显示鼠标放上时,所提示的文件

    2022年4月16日
    165
  • python手动抛出异常能正常启动_python数组去掉第一个元素

    python手动抛出异常能正常启动_python数组去掉第一个元素try:print(‘正常执行’)#根据业务逻辑判断,需要手动抛出异常raiseException(print(a))#raiseException(‘print(a)’)#注意这两个的区别,这个带字符串,直接打印字符串里的内容,python把字符串的内容一字不差解析成了异常并打印出来print(‘正常结束’)exceptExcepti…

    2022年10月18日
    8
  • Petri 网(Petri Net)

    Petri 网(Petri Net)Petri 网基础知识

    2026年3月18日
    2
  • JVM垃圾回收机制(一)[通俗易懂]

    JVM垃圾回收机制(一)[通俗易懂]一、什么是垃圾?1:引用计数算法:给对象中加一个引用计数器,每当有一个引用指向它时,计数器的值就加一,引用失效时,计数器的值就减一。当该对象引用计数器等于0的时候就被视为垃圾。该算法存在很大的缺陷,若两个对象存在互相引用,则两者的引用计数器都不为0,都不能被GC。如:publicclassReferenceCountingGC{publi

    2022年6月7日
    34
  • 20191207-CHKDSK命令修复磁盘教程「建议收藏」

    20191207-CHKDSK命令修复磁盘教程「建议收藏」WIN7下的磁盘突然不能打开。在网上找DiskGenius,结果只能显示可以找到哪些文件,但是不能恢复文件!如果你想恢复文件,是要付费的!本来想找WINPE下的DiskGenius,想想还得准备1TB的移动硬盘呀!(1TB的磁盘出错了!)没有想到直接使用chkdsk几分钟就可以解决问题了!MicrosoftWindows[版本6.1.7601]版权所有(c)2009MicrosoftCorporation。保留所有权利。C:\User…

    2025年7月5日
    5
  • python 中 print 函数用法大全

    python 中 print 函数用法大全

    2022年3月8日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号