博客
关于我
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优化系列-造数据(存储过程+函数)-1
查看>>
MySQL优化配置详解
查看>>
Mysql优化高级篇(全)
查看>>
mysql会员求积分_MySql-统计所有会员的最高前10次的积分和
查看>>
mysql会对联合索性排序优化_MySQL索引优化实战
查看>>
MySQL作为服务端的配置过程与实际案例
查看>>
Mysql使用命令行备份数据
查看>>
MySQL保姆级教程(SQL语法基础篇)从小白到高手的进阶指南,收藏这一篇就够了
查看>>
MySQL修改root密码的各种方法
查看>>
MySQL修改root密码的多种方法
查看>>
mysql修改一列属性
查看>>
MySQL修改密码报错ERROR 1396 (HY000): Operation ALTER USER failed for ‘root‘@‘localhost‘
查看>>
Mysql全局优化参数
查看>>
MySQL全文索引实现简单版搜索引擎
查看>>
MySQL全面瓦解:安装部署与准备
查看>>
mysql共享锁与排他锁
查看>>
MySQL内存表使用技巧
查看>>
MySQL再叙(体系结构、存储引擎、索引、SQL执行过程)
查看>>
mysql出现错误的解决办法
查看>>
MySQL函数
查看>>