hdu 1426 Sudoku Killer (dfs)
Sudoku Killer
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 3674 Accepted Submission(s):
1160
据说,在2008北京奥运会上,会将数独列为一个单独的项目进行比赛,冠军将有可能获得的一份巨大的奖品———HDU免费七日游外加lcy亲笔签名以及同hdu
acm
team合影留念的机会。
所以全球人民前仆后继,为了奖品日夜训练茶饭不思。当然也包括初学者linle,不过他太笨了又没有多少耐性,只能做做最最基本的数独题,不过他还是想得到那些奖品,你能帮帮他吗?你只要把答案告诉他就可以,不用教他是怎么做的。
数独游戏的规则是这样的:在一个9x9的方格中,你需要把数字1-9填写到空格当中,并且使方格的每一行和每一列中都包含1-9这九个数字。同时还要保证,空格中用粗线划分成9个3x3的方格也同时包含1-9这九个数字。比如有这样一个题,大家可以仔细观察一下,在这里面每行、每列,以及每个3x3的方格都包含1-9这九个数字。
例题:
答案:
的矩阵,同一行相邻的两个元素用一个空格分开。其中1-9代表该位置的已经填好的数,问号(?)表示需要你填的数。
对于每组测试数据保证它有且只有一个解。
//218MS 336K 1598 B G++
/* 题意:
数独 dfs:
直接暴搜,一开始以为可以用补缺法做的,后来发现很多情况都不行,
上网看了一下有关解法,发现不太可行,直到看别人的解题报告,才知道
是直接暴搜,无剪枝,用了scanf读入还TLE了= =
思想就是每一个 ? 都用1到9去代,无矛盾继续深搜,有矛盾返回上一层 */
#include<iostream>
using namespace std;
struct node{
int x;
int y;
}a[];
int cnt,ok;
char c[][];
int s[][];
bool judge(int id,int k)
{
int x=a[id].x,y=a[id].y;
for(int i=;i<;i++)
if(s[x][i]==k || s[i][y]==k) return ;
x=x/*;
y=y/*;
for(int i=;i<;i++)
for(int j=;j<;j++)
if(s[x+i][y+j]==k) return ;
return ;
}
void dfs(int cur)
{
if(cur==cnt){
for(int i=;i<;i++)
for(int j=;j<;j++)
printf(j==?"%d\n":"%d ",s[i][j]);
ok=;return;
}
for(int i=;i<=;i++){
if(judge(cur,i) && !ok){
s[a[cur].x][a[cur].y]=i;
dfs(cur+);
s[a[cur].x][a[cur].y]=;
}
}
return;
}
int main(void)
{
//freopen("C:\\Users\\Administrator\\Desktop\\in.txt","r",stdin);
//freopen("C:\\Users\\Administrator\\Desktop\\out.txt","w",stdout);
int flag=;
while(cin>>c[][]) //用scanf反而TLE!!
{
if(flag++) printf("\n");
cnt=;
ok=;
memset(s,,sizeof(s));
for(int i=;i<;i++) cin>>c[][i];
for(int i=;i<;i++)
for(int j=;j<;j++) cin>>c[i][j];
for(int i=;i<;i++){
for(int j=;j<;j++){
if(c[i][j]==' ') continue;
if(c[i][j]=='?'){
a[cnt].x=i;
a[cnt++].y=j;
}
else s[i][j]=c[i][j]-'';
}
}
dfs();
}
return ;
}
hdu 1426 Sudoku Killer (dfs)的更多相关文章
- 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 数独】
自从2006年3月10日至11日的首届数独世界锦标赛以后,数独这项游戏越来越受到人们的喜爱和重视. 据说,在2008北京奥运会上,会将数独列为一个单独的项目进行比赛,冠军将有可能获得的一份巨大的奖品— ...
- hdu 1426 Sudoku Killer
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1426 #include<stdio.h> #include<math.h> #in ...
- HDU 1426 Sudoku Killer(搜索)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1426 题意很明确,让你解一个9*9的数独. DFS即可. #include <cstdio> ...
- hdu 1426 Sudoku Killer ( Dancing Link 精确覆盖 )
利用 Dancing Link 来解数独 详细的能够看 lrj 的训练指南 和 < Dancing Links 在搜索中的应用 >这篇论文 Dancing Link 来求解数独 , ...
- HDU 1426 Sudoku Killer (回溯 + 剪枝)
本文链接:http://i.cnblogs.com/EditPosts.aspx?postid=5398818 题意: 给你一个 9*9 的矩阵,同一行相邻的两个元素用一个空格分开.其中1-9代表该位 ...
- HUD 1426 Sudoku Killer (DFS)
链接 : Here! 思路 : 记录下所有 "?" , 出现的位置, 然后 $DFS$ 一下, 对于每个位置来说都可以填充 $9$ 种数值, 然后对于判断填充是否合法需要三个标记数 ...
- HDOJ Sudoku Killer(dfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1426 思路分析:该问题为数独问题,明显解是唯一的,所有采用dfs搜索效果更好: 在搜索时,可以通过3个 ...
随机推荐
- [JZOJ] 5905. 黑暗之魂(darksoul)
基环树直径裸题 分别在子树做DP,环上做DP,环上可以用单调队列优化到\(O(n)\) 写起来很麻烦 #include<algorithm> #include<iostream> ...
- 【杂题总汇】HDU-6406 Taotao Picks Apples
[HDU 6406]Taotao Picks Apples 多校赛的时候多写了一行代码就WA了……找了正解对拍,在比赛结束后17分钟AC了
- RedHat6.4安装图形行化界面
1.1 打开电源进入RedHat shell命令行界面 1.2 查看系统镜像包括的所有软件包组信息 [root@zhongyi-test ~]# yum grouplist Loaded ...
- PHP自动生成分页链接
page.class.php <?php class Page { // 分页栏每页显示的页数 public $rollPage = 5; // 页数跳转时要带的参数 public $param ...
- dts--tests(二)
rxtx_callbacks.py """ DPDK Test suite. Test Rxtx_Callbacks. """ import ...
- HAN模型理解1
HAN 模型 最开始看这个模型是看的这个解释: RNN+Attention(HAN) 文本分类 阅读笔记 - 今天做作业没的文章 - 知乎 https://zhuanlan.zhihu.com/p/4 ...
- iOS-UICollectionViewController 介绍
废话不多说,列几个列子 (几种情况下的做法): 情景一: 介绍:1. 在UIViewController 上加 UICollectionView (用代码 创建 UICollectionView). ...
- GCJ:2008 Round1AA-Minimum Scalar Product(有序数组倒序乘积和最小)
题目链接:https://code.google.com/codejam/contest/32016/dashboard#s=p0 Minimum Scalar Product This contes ...
- POJ:1995-Raising Modulo Numbers(快速幂)
Raising Modulo Numbers Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 9512 Accepted: 578 ...
- IDA 对 SO 的逆向
ApkTool对apk进行解包,在解包后的lib目录中找到so文件 so文件大概有以下几种 armeabi: 第5代.第6代的ARM处理器,早期的手机用的比较多. armeabiv-v7a:第7代及以 ...