NYOJ 722 数独 【DFS】+【预处理】
数独
- 描写叙述
-
数独是一种运用纸、笔进行演算的逻辑游戏。玩家须要依据9×9盘面上的已知数字,推理出全部剩余空格的数字,并满足每一行、每一列、每个3*3宫内的数字均含1-9,不反复。 每一道合格的数独谜题都有且仅有唯一答案,推理方法也以此为基础,不论什么无解或多解的题目都是不合格的。
有一天hrdv碰到了一道号称是世界上最难的数独的题目。作为一名合格的程序猿,哪能随随便便向困难低头,于是他决定编个程序来解决它。。
- 输入
- 第一行有一个数n(0< n <100),表示有n组測试数据,每组測试数据是由一个9*9的九宫格构成,0表示相应的格子为空
- 输出
- 输出一个9*9的九宫格,为这个数独的答案
- 例子输入
-
1
0 0 5 3 0 0 0 0 0
8 0 0 0 0 0 0 2 0
0 7 0 0 1 0 5 0 0
4 0 0 0 0 5 3 0 0
0 1 0 0 7 0 0 0 6
0 0 3 2 0 0 0 8 0
0 6 0 5 0 0 0 0 9
0 0 4 0 0 0 0 3 0
0 0 0 0 0 9 7 0 0 - 例子输出
-
1 4 5 3 2 7 6 9 8
8 3 9 6 5 4 1 2 7
6 7 2 9 1 8 5 4 3
4 9 6 1 8 5 3 7 2
2 1 8 4 7 3 9 5 6
7 5 3 2 9 6 4 8 1
3 6 7 5 4 2 8 1 9
9 8 4 7 6 1 2 3 5
5 2 1 8 3 9 7 6 4
非常经典的一道搜索题。開始深搜的时候每次都遍历棋盘,结果总是出现莫名其妙的问题,然后预处理了一下,最后就过了。
#include <stdio.h>
#include <string.h>
int arr[10][10], count;
bool visrow[10][10], viscol[10][10], vissqu[10][10], ok;
struct Node{
int x, y;
} tar[82];int getsqunum(int i, int j){
return i / 3 * 3 + j / 3; //the charm of math
}void print(){
for(int i = 0; i < 9; ++i)
for(int j = 0; j < 9; ++j)
if(j != 8) printf("%d ", arr[i][j]);
else printf("%d\n", arr[i][j]);
}bool check(int i, int j, int k){
int t = getsqunum(i, j);
if(visrow[i][k] || viscol[j][k] || vissqu[t][k]) return 0;
return 1;
}void DFS(int k){
if(k == count){ ok = 1; print(); return; }
int t = getsqunum(tar[k].x, tar[k].y);
for(int i = 1; i < 10; ++i){
if(check(tar[k].x, tar[k].y, i)){
visrow[tar[k].x][i] = 1;
viscol[tar[k].y][i] = 1;
vissqu[t][i] = 1;
arr[tar[k].x][tar[k].y] = i;DFS(k + 1);
if(ok) return;arr[tar[k].x][tar[k].y] = 0;
visrow[tar[k].x][i] = 0;
viscol[tar[k].y][i] = 0;
vissqu[t][i] = 0;
}
}
}int main(){
int n; scanf("%d", &n);
while(n--){
memset(viscol, 0, sizeof(viscol));
memset(visrow, 0, sizeof(visrow));
memset(vissqu, 0, sizeof(vissqu));
count = 0;
for(int i = 0; i < 9; ++i)
for(int j = 0; j < 9; ++j){
scanf(&quo
NYOJ 722 数独 【DFS】+【预处理】的更多相关文章
- P1074 靶形数独 dfs+预处理
https://www.luogu.org/problemnew/show/P1074 显然是dfs 而且没有什么剪枝记忆化之类的 但是预处理比较麻烦 我用三个二维数组存状态:visx[x][i]代表 ...
- NYOJ 722 数独
数独 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 数独是一种运用纸.笔进行演算的逻辑游戏.玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一 ...
- codeforces div2_603 F. Economic Difficulties(树dfs预处理+dp)
题目连接:http://codeforces.com/contest/1263/problem/F 题意:有n个设备,上和下分别连接着一颗树,上下两棵树每棵树的叶子节点连接一个设备,两棵树的根节点都是 ...
- NYOJ 数独 DFS
数独 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 数独是一种运用纸.笔进行演算的逻辑游戏.玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一 ...
- 靶形数独 (dfs+预处理+状态压缩)
#2591. 「NOIP2009」靶形数独 [题目描述] 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们 ...
- P1074 靶形数独 dfs回溯法
题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教,Z 博士拿出了他最近发明的“靶 ...
- 洛谷1074 靶状数独dfs 排序、记录、搜索
题目网址:https://www.luogu.com.cn/problem/P1074 大意就是在一个9*9的数独中填数,要求行列宫都是九个互不相同的数字,给定一定的得分机制,要求求解最大得分.思路大 ...
- NOIP2009靶形数独[DFS 优化]
描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z博士请教,Z 博士拿出了他最近发明的“靶形数独 ...
- BZOJ-1087 互不侵犯King 状压DP+DFS预处理
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2337 Solved: 1366 [Submit][ ...
随机推荐
- 九度oj 1003
前几天开刷九度oj,准备把做的题都放上,先放1003 题目1003:A+B 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:16923 解决:7029 题目描述: 给 ...
- 【Luogu】P2657windy数(数位DP)
题目链接 正式迈入了数位DP的大门…… 心情激动 (看我立个flag,我如果专攻数位DP的话,到wc之前就会有秒数位DP蓝题的能力) 数位DP讲解链接 讲的非常详细,良心博客.比我写的博客加在一起还要 ...
- UVa——400Unix ls(字典序文本处理输出iomanip)
Unix ls Time Limit: 3000MS ...
- [UOJ#276]【清华集训2016】汽水
[UOJ#276][清华集训2016]汽水 试题描述 牛牛来到了一个盛产汽水的国度旅行. 这个国度的地图上有 \(n\) 个城市,这些城市之间用 \(n−1\) 条道路连接,任意两个城市之间,都存在一 ...
- AC自动机详解 (P3808 模板)
AC自动机笔记 0.0 前言 哇,好久之前就看了 KMP 和 Trie 树,但是似乎一直没看懂 AC自动机?? 今天灵光一闪,加上之前看到一些博客和视频,瞬间秒懂啊... 其实这个玩意还是蛮好理解的. ...
- 【CF1023B】Pair of Toys(解方程)
题意:给定n个玩具要你选出两个玩具求出k的价值,第i个玩具的价值为i.若是没有选择方案,输出0 补充:玩具A与玩具B 和 玩具B和玩具A 是同一种选择 n,k<=1e14 思路:列出式子,解不等 ...
- 【CF52C】Circular RMQ(线段树区间加减,区间最值)
给定一个循环数组a0, a1, a2, …, an-1,现在对他们有两个操作: Inc(le, ri, v):表示区间[le, ri]范围的数值增加v Rmq(le, ri):表示询问区间[le, r ...
- dpkg --add-architecture i386 && apt-get update && > apt-get install wine32
dpkg --add-architecture i386 && apt-get update &&> apt-get install wine32
- PHP连接MySQL报错"No such file or directory"的解决办法
好下面说一下连接MYSQL数据库时报错的解决办法. 1,首先确定是mysql_connect()和mysql_pconnect()的问题,故障现象就是函数返回空,而mysql_error()返回“No ...
- [开源] FreeSql.Tools Razor 生成器
FreeSql 经过半年的开发和坚持维护,在 0.6.x 版本中完成了几大重要事件: 1.按小包拆分,每个数据库实现为单独 dll: 2.实现 .net framework 4.5 支持: 3.同时支 ...