Sudoku是一个非常简单的任务。 具有9行9列的方形表被划分为9个较小的正方形3x3,如图所示。 在一些单元格中写入从1到9的十进制数字。其他单元格为空。 目标是填充空单元格,其中十进制数字从1到9,每个单元格一个数字,使得每行中每列和每个标记的3x3子方格中的所有数字将显示为1到9。 编写程序来解决给定的数独任务。

Input

输入数据将以测试用例的数量开始。 对于每个测试用例,跟随9行,对应于表的行。 在每行上,给出一个正好9个十进制数字的字符串,对应于该行中的单元格。 如果一个单元格为空,则表示为0。

Output

对于每个测试用例,您的程序应以与输入数据相同的格式打印解决方案。 空单元格必须按照规则填写。 如果解决方案不是唯一的,那么程序可能打印其中任何一个。

Sample Input

1
103000509
002109400
000704000
300502006
060000050
700803004
000401000
009205800
804000107

Sample Output

143628579
572139468
986754231
391542786
468917352
725863914
237481695
619275843
854396127
 #include<cstdio>
#include<iostream>
using namespace std;
char s[];
int sudoku[][];
bool flag;
bool ok(int n,int cur)
{
int r = n / ; //当前行
int c = n % ; //当前列
for(int j = ; j < ; j++) //枚举那一列
if(sudoku[r][j] == cur) return false;
for(int i = ; i < ; i++) //枚举那一行
if(sudoku[i][c] == cur) return false;
int x = r/ *;
int y = c/*; for(int i = x; i < x+; i++) //枚举矩阵中的元素
for(int j = y; j < y + ; j++)
if(sudoku[i][j] == cur)
return false;
return true;
} void DFS(int n)
{
if(n > || flag)
{
flag = true;
return;
}
if(sudoku[n / ][n % ]) //检查当前方格是否填数
{
DFS(n+);
if(flag) return;
}
else
{
for(int cur = ; cur <= ; cur++)
{
if(ok(n,cur))
{
sudoku[n / ][n % ] = cur;
DFS(n + );
if(flag) return;
sudoku[n / ][n % ] = ; //还原
}
}
} } int main()
{
int t;
while(cin>>t)
{
while(t--)
{
flag = false;
for(int i = ; i < ; i++)
{
/*数据输入及清洗*/
scanf("%s",s);
for(int j = ; j < ; j++)
sudoku[i][j] = (s[j] - '');
}
DFS();
for(int i = ; i < ; i++)
{
for(int j = ; j < ; j++)
printf("%d",sudoku[i][j]);
printf("\n");
}
}
}
}

ACM Sudoku的更多相关文章

  1. HDU 4069 Squiggly Sudoku(DLX)(The 36th ACM/ICPC Asia Regional Fuzhou Site —— Online Contest)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4069 Problem Description Today we play a squiggly sud ...

  2. ACM : POJ 2676 SudoKu DFS - 数独

    SudoKu Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu POJ 2676 Descr ...

  3. ACM: ICPC/CCPC Sudoku DFS - 数独

    Sudoku Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/65535K (Java/Other) Total Submis ...

  4. 牛客网暑期ACM多校训练营(第七场)J题(Sudoku Subrectangles)题解

    一.题意 给定一个高度为$n$,宽度为$m$的字母矩形(有大写和小写字母,共$52$种),问里面有多少个子矩形是“数独矩形”.数独矩形是指,该矩形内每一行内元素都不相同,每一列内元素也不相同. 二.思 ...

  5. ACM学习历程—UESTC 1222 Sudoku(矩阵)(2015CCPC H)

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1226 题目大意就是构造一个行列和每个角的2*2都是1234的4*4矩阵. 用dfs暴力搜索,不过需要每一步进 ...

  6. 杭电ACM分类

    杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze ...

  7. HDU - 5547 Sudoku(数独搜索)

    Description Yi Sima was one of the best counselors of Cao Cao. He likes to play a funny game himself ...

  8. hdu1426 Sudoku Killer

    Sudoku Killer Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total ...

  9. HDU 5547 Sudoku(DFS)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=5547 题目: Sudoku Time Limit: 3000/1000 MS (Java/Others ...

随机推荐

  1. Linux命令-权限

    Linux命令权限   1.新建用户natasha,uid为1000, gid为555, 备注信息为"master" 2.修改natasha用户的家目录为/Natasha 3.查看 ...

  2. Codeforces Round #426 (Div. 2)

    http://codeforces.com/contest/834 A. The Useless Toy 题意: <,>,^,v这4个箭头符号,每一个都可以通过其他及其本身逆时针或者顺时针 ...

  3. spring boot 系列之四:spring boot 整合JPA

    上一篇我们讲了spring boot 整合JdbcTemplate来进行数据的持久化, 这篇我们来说下怎么通过spring boot 整合JPA来实现数据的持久化. 一.代码实现 修改pom,引入依赖 ...

  4. glut 深度测试无不起作用问题解决

    OpenGL中使用glEnable(GL_DEPTH_TEST)后深度测试没有起作用,发现深度缓冲没有创建.glut库在兼容模式(GL_COMPATIBILITY_PROFILE)下displaymo ...

  5. MyBatis(2)——MyBatis 深入学习

    编写日志输出环境配置文件 在开发过程中,最重要的就是在控制台查看程序输出的日志信息,在这里我们选择使用 log4j 工具来输出: 准备工作: 将[MyBatis]文件夹下[lib]中的 log4j 开 ...

  6. Plupload 上传控件使用指南

    本文转载至(感谢原作者分享):http://www.cnblogs.com/2050/p/3913184.html#plupload_doc2 我之前写过一篇文章<文件上传利器SWFUpload ...

  7. [LeetCode] Valid Square 验证正方形

    Given the coordinates of four points in 2D space, return whether the four points could construct a s ...

  8. mybatis学习三

    Mybatis与pageHelper分页:    分页分为假分页和真分页对应的专业术语叫做逻辑分页和物理分页    逻辑分页:将所有的数据从数据库查询出来,根据需求截取符合要求的数据返回,方便统一但效 ...

  9. ●UOJ 21 缩进优化

    题链: http://uoj.ac/problem/21 题解: ...技巧题吧 先看看题目让求什么: 令$F(x)=\sum_{i=1}^{n}(\lfloor a[i]/x \rfloor +a[ ...

  10. C++Primer学习——动态内存

    静态内存:用来保存static 栈内存:保存非static 智能指针: shared_ptr:允许多个指针指向一个对象 unique_ptr:独占所指对象 weak_ptr:一种弱引用,指向share ...