博客
关于我
703. 数独检查 - AcWing题库
阅读量:629 次
发布时间:2019-03-14

本文共 1292 字,大约阅读时间需要 4 分钟。

数独是一种流行的单人游戏。

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

每个9x9矩阵在游戏开始时都会有部分数字已经给出,通常有一个独特的解决方案。

1.png

2.png

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

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

每行包含从1到N2的每个数字,每个数字一次。

每列包含从1到N2的每个数字,每个数字一次。
将N2∗N2矩阵划分为N2个非重叠N∗N子矩阵。 每个子矩阵包含从1到N2的每个数字,每个数字一次。
你无需担心问题的唯一性,只需检查给定矩阵是否是有效的解决方案即可。

输入格式

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

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

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

输出格式

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

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

数据范围

1≤T≤100,
3≤N≤6

#include
#include
#include
#include
#include
#include
#include
using namespace std;#define ll long long#define N 40int a[N][N];int v[N];int m,n;bool check_row(){ for(int i=0; i
m || a[i][j]<1) return false; if(!v[a[i][j]]){ v[a[i][j]] = 1; } else{ return false; } } } return true;}bool check_col(){ for(int i=0; i
m || t<1) return false; if(!v[t]){ v[t] = 1; } else{ return false; } } } return true;}bool check_k()//检查块{ for(int i=0; i
m || t<1) return false; if(!v[t]){ v[t] = 1; } else{ return false; } } } } } return true;}int main(){ int t; cin>>t; for(int xx=1; xx<=t; ++xx){ cin>>n; m = n*n; for(int i=0; i
>a[i][j]; if(check_row() && check_col() && check_k()){ printf("Case #%d: Yes\n",xx); } else{ printf("Case #%d: No\n",xx); } } return 0;}

转载地址:http://jpxoz.baihongyu.com/

你可能感兴趣的文章
MySQL数据库操作
查看>>
MYSQL数据库简单的状态检查(show processlist)
查看>>
MySQL数据库高并发优化配置
查看>>
mysql数据恢复
查看>>
MySQL数据的主从复制、半同步复制和主主复制详解
查看>>
mysql数据碎片整理
查看>>
MySQL数据类型
查看>>
MySQL数据读写分离(MaxScale)上干货!!!
查看>>
mysql整库导入、导出
查看>>
Mysql新建用户和数据库并授权
查看>>
mysql日志文件
查看>>
MySQL日期时间函数大全
查看>>
mysql更新一个表里的字段等于另一个表某字段的值
查看>>
Mysql更新时间列只改日期为指定日期不更改时间
查看>>
MySQL更新锁(for update)摘要
查看>>
mysql替换表的字段里面内容
查看>>
MySQL有哪些锁
查看>>
MySQL服务器安装(Linux)
查看>>
mysql服务器查询慢原因分析方法
查看>>
mysql服务无法启动的问题
查看>>