UESTC - 1222 Sudoku(深搜)
Yi Sima was one of the best counselors of Cao Cao. He likes to play a funny game himself. It looks like the modern Sudoku, but smaller.
Actually, Yi Sima was playing it different. First of all, he tried to generate a 4×44×4 board with every row contains 11 to 44 , every column contains 11 to 44 .
Also he made sure that if we cut the board into four 2×22×2
pieces, every piece contains 11
to 44
.
Then, he removed several numbers from the board and gave it to another guy to recover it. As other counselors are not as smart as Yi Sima, Yi Sima always made sure that the
board only has one way to recover.
Actually, you are seeing this because you've passed through to the Three-Kingdom Age. You can recover the board to make Yi Sima happy and be promoted. Go and do it!!!
Input
The first line of the input gives the number of test cases, TT
(1≤T≤1001≤T≤100
). TT
test cases follow. Each test case starts with an empty line followed by 44
lines.
Each line consist of 44
characters. Each character represents the number in the corresponding cell (one of 1, 2, 3, 4). * represents that number was removed by Yi Sima.
It's guaranteed that there will be exactly one way to recover the board.
Output
For each test case, output one line containing Case #x:, where xx
is the test case number (starting from 11
).
Then output 44
lines with 44
characters each. indicate the recovered board.
Sample Input
3 ****
2341
4123
3214 *243
*312
*421
*134 *41*
**3*
2*41
4*2*
Sample Output
Case #1:
1432
2341
4123
3214
Case #2:
1243
4312
3421
2134
Case #3:
3412
1234
2341
4123
题意:一个4*4的矩阵,满足每个数的同行同列都由1234构成的,把4*4矩阵分成4个2*2矩阵,每个矩阵的四个元素也分别
为1234。
这题就是暴力深搜。
ac代码:
1 #include<cstdio>
2 #include<cstring>
3 #define Max 8
4 char st[Max][Max];
5 int judg(int x,int y,char i) //判断当前位置可以是什么数字
6 {
7 if(x<3&&y<3)
8 {
9 if(st[1][1]==i||st[1][2]==i||st[2][1]==i||st[2][2]==i)
10 return 0;
11 }
12 else if(x<3&&y>2)
13 {
14 if(st[1][3]==i||st[1][4]==i||st[2][3]==i||st[2][4]==i)
15 return 0;
16 }
17 else if(x>2&&y<3)
18 {
19 if(st[3][1]==i||st[3][2]==i||st[4][1]==i||st[4][2]==i)
20 return 0;
21 }
22 else if(x>2&&y>2)
23 {
24 if(st[3][3]==i||st[3][4]==i||st[4][3]==i||st[4][4]==i)
25 return 0;
26 }
27 for(int k=1;k<=4;k++)
28 {
29 if(st[x][k]==i||st[k][y]==i)
30 return 0;
31 }
32 return 1;
33 }
34 void dfs(int x,int y)
35 {
36 if(x==5)
37 {
38 for(int i=1;i<=4;i++)
39 printf("%s\n",st[i]+1);
40 return ;
41 }
42 if(st[x][y]!='*')
43 {
44 if(y==4)
45 dfs(x+1,1);
46 else
47 dfs(x,y+1);
48 }
49 else
50 {
51 for(int i=1;i<=4;i++)
52 {
53 if(judg(x,y,i+'0'))
54 {
55 st[x][y]=i+'0';
56 if(y==4)
57 dfs(x+1,1);
58 else
59 dfs(x,y+1);
60 st[x][y]='*'; //如果没有满足的则回溯
61 }
62 }
63 }
64 }
65 int main()
66 {
67 int t;
68 scanf("%d",&t);
69 getchar();
70 for(int i=1;i<=t;i++)
71 {
72 for(int j=1;j<=4;j++)
73 scanf("%s",st[j]+1);
74 printf("Case #%d:\n",i);
75 dfs(1,1);
76 }
77 return 0;
78 }
UESTC - 1222 Sudoku(深搜)的更多相关文章
- UESTC 1222 Sudoku
爆搜即可 /* *********************************************** author : email :523689985@qq.com created tim ...
- ACM学习历程—UESTC 1222 Sudoku(矩阵)(2015CCPC H)
题目链接:http://acm.uestc.edu.cn/#/problem/show/1226 题目大意就是构造一个行列和每个角的2*2都是1234的4*4矩阵. 用dfs暴力搜索,不过需要每一步进 ...
- 深搜+回溯 POJ 2676 Sudoku
POJ 2676 Sudoku Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 17627 Accepted: 8538 ...
- 数独(深搜)(poj2726,poj3074)
数独(深搜)数据最弱版本(poj 2676) Description Sudoku is a very simple task. A square table with 9 rows and 9 co ...
- HDU--杭电--1195--Open the Lock--深搜--都用双向广搜,弱爆了,看题了没?语文没过关吧?暴力深搜难道我会害羞?
这个题我看了,都是推荐的神马双向广搜,难道这个深搜你们都木有发现?还是特意留个机会给我装逼? Open the Lock Time Limit: 2000/1000 MS (Java/Others) ...
- 利用深搜和宽搜两种算法解决TreeView控件加载文件的问题。
利用TreeView控件加载文件,必须遍历处所有的文件和文件夹. 深搜算法用到了递归. using System; using System.Collections.Generic; using Sy ...
- 2016弱校联盟十一专场10.3---Similarity of Subtrees(深搜+hash、映射)
题目链接 https://acm.bnu.edu.cn/v3/problem_show.php?pid=52310 problem description Define the depth of a ...
- 2016弱校联盟十一专场10.2---Around the World(深搜+组合数、逆元)
题目链接 https://acm.bnu.edu.cn/v3/problem_show.php?pid=52305 problem description In ICPCCamp, there ar ...
- 2015暑假多校联合---Cake(深搜)
题目链接:HDU 5355 http://acm.split.hdu.edu.cn/showproblem.php?pid=5355 Problem Description There are m s ...
随机推荐
- celery应用
celery---分布式任务队列 Celery是一个简单,灵活且可靠的分布式系统,可以处理大量消息,同时为操作提供维护该系统所需的工具. Celery是一个基于python开发的模块,可以帮助我们对任 ...
- html简单基础
标签语法 标签的语法: <标签名 属性1="属性值1" 属性2="属性值2"-->内容部分</标签名> <标签名 属性1=&quo ...
- Linux中让终端输入变为非阻塞的三种方法
介绍 在linux下每打开一个终端,系统自动的就打开了三个文件,它们的文件描述符分别为0,1,2,功能分别是"标准输入"."标准输出"和"标准错误输出 ...
- hook笔记②
- Maven 依赖机制
概述 在 Maven 依赖机制的帮助下自动下载所有必需的依赖库,并保持版本升级.让我们看一个案例研究,以了解它是如何工作的.假设你想使用 Log4j 作为项目的日志.这里你要做什么? 传统方式 访问 ...
- Language Guide (proto3) | proto3 语言指南(十五)生成类
Generating Your Classes - 生成类 要生成Java.Python.C++.Go.Ruby.ObjuleC或C代码,需要使用.proto文件中定义的消息类型,还需要在.proto ...
- SSH框架搭建详细步骤整理
学习Java面前有两座山,一座山叫SSM,一座山叫SSH,跨越了这两座山之后才能感受到这个语言的魅力所在,SSM框架的搭建详细在之前博客已经涉及了,今天来整理SSH框架详细步骤: 生有涯 而 学无涯 ...
- JTS Geometry
JTS Geometry关系判断和分析 JTS Geometry关系判断和分析 1.关系判断 1.1实例 2.关系分析 2.1实例 JTS(Geometry) JTS Geometry关系判断和分析 ...
- ArrayList源码分析(JDK1.8)
概述 ArrayList底层是基于数组实现的,并且支持动态扩容的动态数组(变长的集合类).ArrayList允许空值和重复的元素,当向ArrayList中添加元素数量大于其底层数组容量时,会通过扩容机 ...
- CF-1291 D - Irreducible Anagrams
D. Irreducible Anagrams 题意 若两个字符串中每个字符的个数都是一样的,则称他们互为\(anagrams\).现在定义两个字符串s,t是\(reducible~anagram\) ...