HDU 1426 Sudoku Killer(搜索)
题目链接: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(搜索)的更多相关文章
- HDU 1426 Sudoku Killer(dfs 解数独)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1426 Sudoku Killer Time Limit: 2000/1000 MS (Java/Oth ...
- hdu 1426:Sudoku Killer(DFS深搜,进阶题目,求数独的解)
Sudoku Killer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- hdu 1426 Sudoku Killer (dfs)
Sudoku Killer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- hdu 1426 Sudoku Killer
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1426 #include<stdio.h> #include<math.h> #in ...
- hdu 1426 Sudoku Killer ( Dancing Link 精确覆盖 )
利用 Dancing Link 来解数独 详细的能够看 lrj 的训练指南 和 < Dancing Links 在搜索中的应用 >这篇论文 Dancing Link 来求解数独 , ...
- HDU 1426 Sudoku Killer【DFS 数独】
自从2006年3月10日至11日的首届数独世界锦标赛以后,数独这项游戏越来越受到人们的喜爱和重视. 据说,在2008北京奥运会上,会将数独列为一个单独的项目进行比赛,冠军将有可能获得的一份巨大的奖品— ...
- HDU 1426 Sudoku Killer (回溯 + 剪枝)
本文链接:http://i.cnblogs.com/EditPosts.aspx?postid=5398818 题意: 给你一个 9*9 的矩阵,同一行相邻的两个元素用一个空格分开.其中1-9代表该位 ...
- HUD 1426 Sudoku Killer (DFS)
链接 : Here! 思路 : 记录下所有 "?" , 出现的位置, 然后 $DFS$ 一下, 对于每个位置来说都可以填充 $9$ 种数值, 然后对于判断填充是否合法需要三个标记数 ...
- P - Sudoku Killer HDU - 1426(dfs + map统计数据)
P - Sudoku Killer HDU - 1426 自从2006年3月10日至11日的首届数独世界锦标赛以后,数独这项游戏越来越受到人们的喜爱和重视. 据说,在2008北京奥运会上,会将数独列为 ...
随机推荐
- 【Feasibility of Learning】林轩田机器学习基石
这一节的核心内容在于如何由hoeffding不等式 关联到机器学习的可行性. 这个PAC很形象又准确,描述了“当前的可能性大概是正确的”,即某个概率的上届. hoeffding在机器学习上的关联就是: ...
- UasyUi的各种方法整理
UasyUi的各种方法整理: 1.拖动 放置 droppable $('#dd').droppable({ }); 2.创建可变大小的窗口 resizable $('#rr').resizable({ ...
- 为什么要内存对齐 Data alignment: Straighten up and fly right
转载于http://blog.csdn.net/lgouc/article/details/8235471 为了速度和正确性,请对齐你的数据. 概述:对于所有直接操作内存的程序员来说,数据对齐都是很重 ...
- Linq中Count()和Any()引发的效率问题
1.count和any 今天看了鹤冲天的文章:Linq:切勿使用 Count() > 0 来判断集合非空 有所收获,写下文章总结一下: 先看如下代码: static void Main(st ...
- win10系统安装之GHOST还原(转+编辑)
注意*:在以下操作中,你可能需要分区你的原来系统盘,如果是重装的话.现在我们使用SSD固态做系统盘盘,这个分区的话,点选mbr重新引导,以及对齐复选框. 如果前面过程都没问题,在安装过程中出现 ...
- Spring 笔记(一)概念梳理
概念 预备知识 1. POJO POJO是Plain Old Java Object的缩写,是软件开发大师Martin Fowler提出的一个概念,指的是一个普通Java类.也就说,你随便编写一个Ja ...
- bash语法注意点
bash 语法注意点 =和不能分开 如: val=expr $a + $b` [空格 *** 空格]条件判断要有空格 如: if [ $a ==$b ] 表达式和运算符之间要有空格, $a空格 + 空 ...
- 第二阶段团队冲刺-seven
昨天: 合并程序(添加打印txt). 今天: 整体调试程序继续优化. 遇到的问题: 解决前两天的问题.
- 团队Alpha版本(九)
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...
- [poj] 1269 [zoj] 1280 Interesting Lines || 求两直线交点
POJ原题 ZOJ原题 多组数据.每次给出四个点,前两个点确定一条直线,后两个点确定一条直线,若平行则输出"NONE",重合输出"LINE",相交输出" ...