题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1426

题意很明确,让你解一个9*9的数独。

DFS即可。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <functional> using namespace std; #define REP(i,n) for(int i(0); i < (n); ++i)
#define rep(i,a,b) for(int i(a); i <= (b); ++i)
#define dec(i,a,b) for(int i(a); i >= (b); --i)
#define for_edge(i,x) for(int i = H[x]; i; i = X[i]) #define LL long long
#define ULL unsigned long long
#define MP make_pair
#define PB push_back
#define FI first
#define SE second
#define INF 1 << 30 const int N = + ;
const int M = + ;
const int Q = + ;
const int A = + ; struct node{
int x, y;
} d[Q]; char ch; bool a[A][A];
int f[A][A], r[A][A], c[A][A], v[A][A];
bool rr[A][A], cc[A][A], vv[A][A];
int num; inline void print(){
rep(i, , ){rep(j, , ) printf("%d ", f[i][j]); printf("%d", f[i][]); putchar();}
} void dfs(int now){
if (now > num){ print(); return ;}
int x = d[now].x, y = d[now].y; rep(i, , ){
if (vv[v[x][y]][i]) continue;
if (cc[c[x][y]][i]) continue;
if (rr[r[x][y]][i]) continue;
f[x][y] = i;
vv[v[x][y]][i] = true;
cc[c[x][y]][i] = true;
rr[r[x][y]][i] = true;
dfs(now + );
f[x][y] = ;
vv[v[x][y]][i] = false;
cc[c[x][y]][i] = false;
rr[r[x][y]][i] = false;
} } int main(){
#ifndef ONLINE_JUDGE
freopen("test.txt", "r", stdin);
freopen("test.out", "w", stdout);
#endif rep(i, , ) rep(j, , ) v[i][j] = ;
rep(i, , ) rep(j, , ) v[i][j] = ;
rep(i, , ) rep(j, , ) v[i][j] = ;
rep(i, , ) rep(j, , ) v[i][j] = ;
rep(i, , ) rep(j, , ) v[i][j] = ;
rep(i, , ) rep(j, , ) v[i][j] = ;
rep(i, , ) rep(j, , ) v[i][j] = ;
rep(i, , ) rep(j, , ) v[i][j] = ;
rep(i, , ) rep(j, , ) v[i][j] = ;
rep(i, , ) rep(j, , ) r[i][j] = i, c[i][j] = j;
int Case = ; //rep(i, 1, 9){rep(j, 1, 9) printf("%d ", c[i][j]); putchar(10); }
while (~scanf("%c ", &ch)){
if (Case) puts(""); else Case = ;
// memset(a, false, sizeof a);
memset(f, , sizeof f);
memset(cc, false, sizeof cc);
memset(vv, false, sizeof vv);
memset(rr, false, sizeof vv);
memset(d, , sizeof d);
num = ;
if (ch == '?'){
f[][] = ;
d[++num].x = , d[num].y = ;
}
else{
int np = (int)ch - ;
f[][] = np;
cc[c[][]][np] = true;
vv[v[][]][np] = true;
rr[r[][]][np] = true;
} rep(cnt, , ){
scanf("%c ", &ch);
int x = (cnt - ) / + , y = (cnt - ) % + ;
if (ch == '?'){
f[x][y] = ;
d[++num].x = x, d[num].y = y;
}
else{
int np = (int)ch - ;
f[x][y] = np;
cc[c[x][y]][np] = true;
vv[v[x][y]][np] = true;
rr[r[x][y]][np] = true; }
//rep(i, 1, 9){rep(j, 1, 9) printf("%d ", f[i][j]); putchar(10);}
}
dfs();
} return ; }

HDU 1426 Sudoku Killer(搜索)的更多相关文章

  1. HDU 1426 Sudoku Killer(dfs 解数独)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1426 Sudoku Killer Time Limit: 2000/1000 MS (Java/Oth ...

  2. hdu 1426:Sudoku Killer(DFS深搜,进阶题目,求数独的解)

    Sudoku Killer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  3. hdu 1426 Sudoku Killer (dfs)

    Sudoku Killer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  4. hdu 1426 Sudoku Killer

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1426 #include<stdio.h> #include<math.h> #in ...

  5. hdu 1426 Sudoku Killer ( Dancing Link 精确覆盖 )

    利用 Dancing Link 来解数独 详细的能够看    lrj 的训练指南 和 < Dancing Links 在搜索中的应用 >这篇论文 Dancing Link 来求解数独 , ...

  6. HDU 1426 Sudoku Killer【DFS 数独】

    自从2006年3月10日至11日的首届数独世界锦标赛以后,数独这项游戏越来越受到人们的喜爱和重视. 据说,在2008北京奥运会上,会将数独列为一个单独的项目进行比赛,冠军将有可能获得的一份巨大的奖品— ...

  7. HDU 1426 Sudoku Killer (回溯 + 剪枝)

    本文链接:http://i.cnblogs.com/EditPosts.aspx?postid=5398818 题意: 给你一个 9*9 的矩阵,同一行相邻的两个元素用一个空格分开.其中1-9代表该位 ...

  8. HUD 1426 Sudoku Killer (DFS)

    链接 : Here! 思路 : 记录下所有 "?" , 出现的位置, 然后 $DFS$ 一下, 对于每个位置来说都可以填充 $9$ 种数值, 然后对于判断填充是否合法需要三个标记数 ...

  9. P - Sudoku Killer HDU - 1426(dfs + map统计数据)

    P - Sudoku Killer HDU - 1426 自从2006年3月10日至11日的首届数独世界锦标赛以后,数独这项游戏越来越受到人们的喜爱和重视. 据说,在2008北京奥运会上,会将数独列为 ...

随机推荐

  1. Json 转换 1 转成 true 0 转成false

  2. Python第三方模块tesserocr安装

    介绍 在爬虫过程中,难免会遇到各种各样的验证码,而大多数验证码还是图形验证码,这时候我们可以直接用 OCR 来识别. tesserocr 是 Python 的一个 OCR 识别库 ,但其实是对 tes ...

  3. C# Socket通信的服务器与客户端

    客户端代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...

  4. JavaWeb笔记(三)HTTP

    常见请求头 User-Agent:浏览器版本信息,可以解决浏览器兼容性问题 Referer:请求来源地址,可以防盗链和统计 Request 方法 获取请求方式: String getMethod() ...

  5. hadoop2.5.2学习及实践笔记(四)—— namenode启动过程源码概览

    对namenode启动时的相关操作及相关类有一个大体了解,后续深入研究时,再对本文进行补充 >实现类 HDFS启动脚本为$HADOOP_HOME/sbin/start-dfs.sh,查看star ...

  6. 实用JS系列——面向对象中的类和继承

    背景: 在最开始学习JavaScript时,我们就知道,它是一种脚本语言,也有面向对象机制.但它的面向对象继承机制是基于原型的,即Prototype.今天,我们就来找一下JS中OO的影子. 创建类 1 ...

  7. MYSQL 简单的建库操作代码

    一.查询所有数据库 代码:show databases; 成功后如下图: 二.建立一个数据库 代码:create database test3: 成功后如下图: 三.连接数据库 代码:use test ...

  8. AJAX提交表单后要清空,否则再次提交原来的数据会认为重复提交,提交失败。使用ajaxSubmit 函数需要引入jquery.form.min.js 文件

    <script src="../../Scripts/js/jquery.form.min.js" type="text/javascript">& ...

  9. CSS3 em && rem 详细教程

    1 # mobile css & rem & em & px > 1 rem === 16px 任意浏览器的默认字体高都是 16px, 所有未经调整的浏览器都符合: 1e ...

  10. hdu 1426 Sudoku Killer (dfs)

    Sudoku Killer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...