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 ...
随机推荐
- 20151212Jquery 工具函数代码备份
$(function () { /*var str=' jquery '; alert(str); alert($.trim(str));*/ /*var arr=['张三','李四','王五','麻 ...
- 转载---SQL Server XML基础学习<2>之--FOR XML AUTO/RAW
本文主要介绍FOR XML 的 AUTO 模式和 RAW 模式 --AUTO 模式将查询结果以嵌套 XML 元素的方式返回.这不能较好地控制从查询结果生成的 XML 的形式. --如果要生成简单的层次 ...
- 周末充电之WPF(三 ) .后台动态生成控件
布局 -连连看: 代码: private void Window_Loaded_1(object sender, RoutedEventArgs e) { //动态创建行 ; i < ; i++ ...
- xCode如何导入自定义的snippets文件
xCode代码块snippets导入 目标文件放置位置 ~/Library/Developer/Xcode/UserData/CodeSnippets 操作方法: 解压缩并复制到以下目录即可
- asp.net WebService异步
1 #region 异步测试 2 //委托 3 public delegate void PrintDelegate(string s); 4 [WebMethod] 5 public string ...
- webService学习记录
服务端配置1.新建web项目,导入xFire的jar包2.创建服务接口.实现类3.创建src->META-INF->service->service.xml 将实现类.接口配置到里面 ...
- 删除Windows右键不用的选项
1.使用QQ电脑管家或者360的,一般都有小工具. 2.管理注册表 █以WindowsXP(SP2)为例,有些右键菜单中的选项你并不常用,或者有些软件已被删除,但其仍然占据着右键菜单.要删除这些无用的 ...
- CF Round#240题解
第一次参加CF的比赛,MSK19.30,四个小时的时差真心累,第一次CODE到这么夜-- 一开始做了A,C两题,后来做B题的时候我体力和精神集中度就很低了,导致一直WA在4-- 今天起床后再刷B,终于 ...
- greenplum学习
公司TM蛋疼,动不动让你学习新东西,就是不让你闲下来,本着胳膊拧不过大腿定律,忍了,这是背景. 好吧哥端起一本厚厚的<GreenPlum企业应用实战>,打开百度开始GP的学习之路: GP只 ...
- ubuntu fcitx 安装 使用
系统内置的ibus的86五笔,感觉有些老不太好用, 所以安装试用了一下fcitx下的五笔,记录一下安装方法 ,各种搜索... 我的ubuntn版本: #48-Ubuntu SMP Fri Aug 24 ...