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

Input

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

Output

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

Sample Input

  1. 1
  2. 103000509
  3. 002109400
  4. 000704000
  5. 300502006
  6. 060000050
  7. 700803004
  8. 000401000
  9. 009205800
  10. 804000107

Sample Output

  1. 143628579
  2. 572139468
  3. 986754231
  4. 391542786
  5. 468917352
  6. 725863914
  7. 237481695
  8. 619275843
  9. 854396127
  1. #include<cstdio>
  2. #include<iostream>
  3. using namespace std;
  4. char s[];
  5. int sudoku[][];
  6. bool flag;
  7. bool ok(int n,int cur)
  8. {
  9. int r = n / ; //当前行
  10. int c = n % ; //当前列
  11. for(int j = ; j < ; j++) //枚举那一列
  12. if(sudoku[r][j] == cur) return false;
  13. for(int i = ; i < ; i++) //枚举那一行
  14. if(sudoku[i][c] == cur) return false;
  15. int x = r/ *;
  16. int y = c/*;
  17.  
  18. for(int i = x; i < x+; i++) //枚举矩阵中的元素
  19. for(int j = y; j < y + ; j++)
  20. if(sudoku[i][j] == cur)
  21. return false;
  22. return true;
  23. }
  24.  
  25. void DFS(int n)
  26. {
  27. if(n > || flag)
  28. {
  29. flag = true;
  30. return;
  31. }
  32. if(sudoku[n / ][n % ]) //检查当前方格是否填数
  33. {
  34. DFS(n+);
  35. if(flag) return;
  36. }
  37. else
  38. {
  39. for(int cur = ; cur <= ; cur++)
  40. {
  41. if(ok(n,cur))
  42. {
  43. sudoku[n / ][n % ] = cur;
  44. DFS(n + );
  45. if(flag) return;
  46. sudoku[n / ][n % ] = ; //还原
  47. }
  48. }
  49. }
  50.  
  51. }
  52.  
  53. int main()
  54. {
  55. int t;
  56. while(cin>>t)
  57. {
  58. while(t--)
  59. {
  60. flag = false;
  61. for(int i = ; i < ; i++)
  62. {
  63. /*数据输入及清洗*/
  64. scanf("%s",s);
  65. for(int j = ; j < ; j++)
  66. sudoku[i][j] = (s[j] - '');
  67. }
  68. DFS();
  69. for(int i = ; i < ; i++)
  70. {
  71. for(int j = ; j < ; j++)
  72. printf("%d",sudoku[i][j]);
  73. printf("\n");
  74. }
  75. }
  76. }
  77. }

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. python 资产管理

    python 资产管理 一.Agent 方式 1.这个方法的优点:使用简单,速度快,适合服务器较多场景使用,缺点:服务器比较占资源,性能会变低. 2.使用Agent的前提条件是客户端(服务器)特别多的 ...

  2. spring boot 系列之三:spring boot 整合JdbcTemplate

    前面两篇文章我们讲了两件事情: 通过一个简单实例进行spring boot 入门 修改spring boot 默认的服务端口号和默认context path 这篇文章我们来看下怎么通过JdbcTemp ...

  3. linux添加超级用户

    创建super账号 useradd testuser 创建用户testuser passwd testuser 给已创建的用户testuser设置密码 如果需要让此用户有root权限,执行命令: ro ...

  4. Menu-右键弹出菜单

    #右键弹出菜单 from tkinter import * root=Tk() def callback(): print('我被调用了') menubar =Menu(root) menubar.a ...

  5. Vue项目模板--和--webpack自动化构建工具的---项目打包压缩使用

    [首先安装node.js]: 1. 从node.js官网下载并安装node,安装过程很简单. 2. npm 版本需要大于 3.0,如果低于此版本需要升级它: # 查看版本 npm -v2.3.0 #升 ...

  6. WPF中自定义GridLengthAnimation

    需求 我们想在编辑一个列表中某一个条目时,将编辑的详情内容也放置当前面,比如右侧. 可以通过将一个Grid,分成两个Cloumn,动态调整两个Cloumn的Width,就可以实现这个需求. 我们知道, ...

  7. myeclipse自动添加注释

    开发需要,新建类的时候,需要加自己的名字,每次都要自己写,嫌麻烦,修改一下myeclipse配置文件即可 打开window---preferences 选中 new Java files 点击edit ...

  8. scrapy下载图片到自己的目录,创建缩略图,存储入库

    环境和工具:python2.7,scrapy 实验网站:http://www.27270.com/tag/333.html  爬去所有兔女郎图片,下面的推荐需要过滤 逻辑:分析网站信息,下载图片和入库 ...

  9. [BZOJ]4755: [Jsoi2016]扭动的回文串

    Time Limit: 10 Sec  Memory Limit: 512 MB Description JYY有两个长度均为N的字符串A和B. 一个"扭动字符串S(i,j,k)由A中的第i ...

  10. NOIP2014-5-17模拟赛

    Problem 1 双色球(ball.cpp/c/pas) [题目描述] 机房来了新一届的学弟学妹,邪恶的chenzeyu97发现一位学弟与他同名,于是他当起了善良的学长233 "来来来,学 ...