Sudoku
Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 12005   Accepted: 5984   Special Judge

Description

Sudoku is a very simple task. A square table with 9 rows and 9 columns is divided to 9 smaller squares 3x3 as shown on the Figure. In some of the cells are written decimal digits from 1 to 9. The other cells are empty. The goal is to fill the empty cells with decimal digits from 1 to 9, one digit per cell, in such way that in each row, in each column and in each marked 3x3 subsquare, all the digits from 1 to 9 to appear. Write a program to solve a given Sudoku-task. 

Input

The input data will start with the number of the test cases. For each test case, 9 lines follow, corresponding to the rows of the table. On each line a string of exactly 9 decimal digits is given, corresponding to the cells in this line. If a cell is empty it is represented by 0.

Output

For each test case your program should print the solution in the same format as the input data. The empty cells have to be filled according to the rules. If solutions is not unique, then the program may print any one of them.

Sample Input

1
103000509
002109400
000704000
300502006
060000050
700803004
000401000
009205800
804000107

Sample Output

143628579
572139468
986754231
391542786
468917352
725863914
237481695
619275843
854396127
题目大意:数独填空。
解题方法:搜索。
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std; typedef struct
{
int x;
int y;
}Point; Point p[]; char Maze[][];
int nCount = ;
bool bfind = false; bool Judge1(int row, int n)
{
for (int i = ; i < ; i++)
{
if (Maze[row][i] == n)
{
return false;
}
}
return true;
} bool Judge2(int col, int n)
{
for (int i = ; i < ; i++)
{
if (Maze[i][col] == n)
{
return false;
}
}
return true;
} bool Judge3(int row, int col, int n)
{
row = row / ;
col = col / ;
for (int i = row * ; i < row * + ; i++)
{
for (int j = col * ; j < col * + ; j++)
{
if (Maze[i][j] == n)
{
return false;
}
}
}
return true;
} void DFS(int Step)
{
if (Step == nCount && !bfind)
{
bfind = true;
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
printf("%d", Maze[i][j]);
}
printf("\n");
}
}
for (int i = ; i <= ; i++)
{
if (Judge1(p[Step].x, i) && Judge2(p[Step].y, i) && Judge3(p[Step].x, p[Step].y, i) && !bfind && Maze[p[Step].x][p[Step].y] == )
{
Maze[p[Step].x][p[Step].y] = i;
DFS(Step + );
Maze[p[Step].x][p[Step].y] = ;
}
}
} int main()
{
int nCase;
char str[];
scanf("%d", &nCase);
memset(Maze, , sizeof(Maze));
while(nCase--)
{
nCount = ;
bfind = false;
for (int i = ; i < ; i++)
{
scanf("%s", str);
for (int j = ; j < ; j++)
{
Maze[i][j] = str[j] - '';
if (Maze[i][j] == )
{
p[nCount].x = i;
p[nCount].y = j;
nCount++;
}
}
}
DFS();
}
return ;
}

最新文章

  1. React视角下的轮播图
  2. 解决IE8 内置JSON.stringify,中文变unicode的问题
  3. MAC破解软件
  4. 数论v2
  5. 如何更改UITextField 的placeholder 的字体颜色
  6. jquery给input域赋值和取值
  7. rectangle类。java
  8. hotfix分析
  9. 9款完美体验的HTML5/jQuery应用
  10. Use windows batch script to create menu
  11. Qt出现警告 Unescaped backslashes are deprecated!解决办法
  12. iOS 设置代理过程
  13. 网络智能和大数据公开课Homework3 Map-Reduce编程
  14. Oracle字符串分割函数
  15. 慕课linux学习笔记(九)常用命令(6)
  16. JIRA初步
  17. 2.如何修改apache的默认端口
  18. pycharm 中 import requests 报错
  19. frame与iframe的区别及基本用法
  20. Hanlp1.7版本的新增功能一览

热门文章

  1. 从快的线上callback hell代码说起
  2. [游戏模版19] Win32 物理引擎 匀速运动
  3. Linux:Linux 重要人物
  4. 【Android】AppCompat V21:将 Materia Design 兼容到5.0之前的设备
  5. JS基本内容
  6. 数据类型/强制类型转换 和运算符---标识符规则/关键字 a++和++a区别
  7. Struts2入门3 深入学习
  8. 19数据表的创建-普通表&amp;临时表-天轰穿大话数据库视频教程
  9. 淘宝TOP之API测试
  10. JPA的事务注解@Transactional使用总结