POJ2676 Sudoku(dfs)
题目链接。
题目大意:
就是数独游戏。横竖,每一个9宫方块,必须有1~9,且不重复。
分析:
直接DFS。一开始在原图上搜,会TLE。把要补全的空格,放入数组,这样就不用遍历整个图寻找要填的空格了。
row, col, sq分别标记行,列,3*3方格是否重复。
话说,直接做
有人说反着搜(正着搜的意思就是从0~cnt-1,反着搜就是从cnt~0),试了试。
AC代码如下:
#include <cstdio>
#include <iostream>
#include <map>
#include <cstring> using namespace std; struct node {
int x, y;
}q[*+]; bool row[][], col[][], sq[][][];
int G[][], cnt; bool dfs(int cn) {
if(cn < ) return true; int x = q[cn].x, y = q[cn].y; for(int k=; k<=; k++) {
if(row[x][k] || col[y][k] || sq[x/][y/][k]) continue;
row[x][k] = col[y][k] = sq[x/][y/][k] = true; G[x][y] = k;
if(dfs(cn-)) return true; row[x][k] = col[y][k] = sq[x/][y/][k] = false;
} return false;
} int main() {
int T;
scanf("%d", &T); while(T--) {
cnt = ;
memset(row, false, sizeof(row));
memset(col, false, sizeof(col));
memset(sq, false, sizeof(sq)); for(int i=; i<; i++) {
for(int j=; j<; j++) {
scanf("%1d", &G[i][j]);
int k = G[i][j];
if(k != ) {
row[i][k] = col[j][k] = sq[i/][j/][k] = true;
}
else q[cnt++] = (node){i, j};
}
} dfs(cnt-); for(int i=; i<; i++) {
for(int j=; j<; j++) {
printf("%d", G[i][j]);
}
putchar('\n');
}
} return ;
}
POJ2676 Sudoku(dfs)的更多相关文章
- poj2676 Sudoku(DFS)
做了很久还是参考了别人的答案orz,其实也不难啊.我要开始学一下怎么写搜索了... 题目链接:poj2676 Sudoku 题解:暴力搜索,DFS每个空白格子所放数字. #include<cst ...
- POJ2676 – Sudoku(数独)—DFS
Sudoku Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 24081 Accepted: 11242 Specia ...
- ACM : POJ 2676 SudoKu DFS - 数独
SudoKu Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu POJ 2676 Descr ...
- ACM: ICPC/CCPC Sudoku DFS - 数独
Sudoku Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/65535K (Java/Other) Total Submis ...
- poj2676 Sudoku
Sudoku Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 17953 Accepted: 8688 Special ...
- HDU 5547 Sudoku(DFS)
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=5547 题目: Sudoku Time Limit: 3000/1000 MS (Java/Others ...
- 【DLX算法】poj2676 Sudoku
DLX算法求解精确覆盖问题模板.赛场上可以参见白书. #include<cstdio> #include<cstring> #include<vector> usi ...
- poj 2676 Sudoku ( dfs )
dfs 用的还是不行啊,做题还是得看别人的博客!!! 题目:http://poj.org/problem?id=2676 题意:把一个9行9列的网格,再细分为9个3*3的子网格,要求每行.每列.每个子 ...
- POJ2676 Sudoku [数独]
好题,也非常有用,犯了几个错误 1.在枚举赋值的时候,思维有个错误:当当前的赋值不能填完这个数独,应该是继续下一个循环,而不是return false 终止枚举 2.Generic Programin ...
随机推荐
- WPF窗体视图中绑定Resources文件中字符串时,抛出:System.Windows.Markup.StaticExtension
问题描述: 在Resources.resx定义了一个静态字符串字段Title,并在WPF窗体视图中绑定为窗体的标题: Title="{x:Static local:Resources.Tit ...
- 安卓模拟器还是"genymotion"最靠谱.
安卓模拟器还是"genymotion"最靠谱. genymotion
- [USACO1.2.2]方块转换 Transformations
P1205 [USACO1.2]方块转换 Transformations 标签 搜索/枚举 USACO 题目描述 一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方 ...
- (hdu)1285 确定比赛名次
Problem Description 有N个比赛队(<=N<=),编号依次为1,,,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接 ...
- WEB开发原则
1.最小权限原则,只允许用户做****,而不是"不允许用户做****"2.浏览器查看的是服务端代码的执行输出的文本,除非服务器有漏洞,否则浏览者无法查看 服务端的ASPX,CS代码 ...
- HTTP中Get与Post、ViewState 原理
Http是请求,响应的模型,服务器不会来读取浏览器的网页,只能够得到客户端提交过来的数据当用户点击提交,服务器就知道"提交回来了"(PostBack) Get与Post 设置for ...
- ubuntn svn 安装 配置
参考文章 http://zhan.renren.com/itbegin?gid=3602888498033631485&checked=true 上面的文章说得很详细 sudo apt-ge ...
- python的一个表达式的计算(超简单)
运行的过程如下: 输入计算表达式:3+5 计算结果:8 然后再次显示计算表达式,等待输入完成后,再次显示结果,依此循环. 作为初学者再适合不过,代码也简单,如下所示: #!/usr/bin/env ...
- zabbix 配置
终于把zabbix配置好了.可能还有待优化 我主要参考了几个链接 http://lnmp.org/install.html 一键安装lnmp http://blog.unix178.com/2 ...
- [Caffe] ubuntu14.04下使用OpenBLAS加速Caffe
一.apt安装 sudo apt-get install libopenblas-dev 二.手动从source安装 1. 下载OpenBLAS并编译 git clone https://github ...