Sudoku(dfs)
http://poj.org/problem?id=2676
填九宫格
思路:将每一行,每一列及每一个3*3块中出现的数字标记上,将可填的空的位置记录下来,枚举1-9,填入合适的数。
#include <stdio.h>
#include <string.h>
int row[][],col[][],arr[][];//row[x][i]表示i所在的行为x;
//col[y][i]表示i所在的列为y;
//arr[n][i]表示i所在的3*3方格;
int keep[][],map[][],num,t; //keep[][]记录可填数的位置;
void show()
{
for (int i = ;i < ;i ++)
{
for (int j = ;j < ;j ++)
{
printf("%d",map[i][j]);
}
puts("");
}
}
int dfs(int x,int y)
{
if (t==num)
{
show();
return ;
}
for (int i = ;i <= ;i ++)
{
int k = x/*+y/;
if (!row[x][i]&&!col[y][i]&&!arr[k][i])
{
map[x][y] = i;
row[x][i] = ;
col[y][i] = ;
arr[k][i] = ;
++t;
if (dfs(keep[t][],keep[t][]))
return ;
--t;
//回溯过程中,清除标记
map[x][y] = ;
row[x][i] = ;
col[y][i] = ;
arr[k][i] = ; }
}
return ; }
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
t = ;
memset(row,,sizeof(row));
memset(col,,sizeof(col));
memset(arr,,sizeof(arr));
memset(keep,,sizeof(keep));
for (int i = ;i < ;i ++)
{
for (int j = ;j < ;j ++)
{
scanf("%1d",&map[i][j]);//控制格式输入
if (map[i][j])
{
int k = i/*+j/;
row[i][map[i][j]] = ;
col[j][map[i][j]] = ;
arr[k][map[i][j]] = ;
}
else
{
keep[t][] = i;
keep[t++][] = j;
}
}
}
num = t;
t = ;
dfs(keep[t][],keep[t][]);
}
return ;
}
Sudoku(dfs)的更多相关文章
- 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 ...
- HDU 5547 Sudoku(DFS)
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=5547 题目: Sudoku Time Limit: 3000/1000 MS (Java/Others ...
- poj 2676 Sudoku ( dfs )
dfs 用的还是不行啊,做题还是得看别人的博客!!! 题目:http://poj.org/problem?id=2676 题意:把一个9行9列的网格,再细分为9个3*3的子网格,要求每行.每列.每个子 ...
- POJ2676 Sudoku(dfs)
题目链接. 题目大意: 就是数独游戏.横竖,每一个9宫方块,必须有1~9,且不重复. 分析: 直接DFS.一开始在原图上搜,会TLE.把要补全的空格,放入数组,这样就不用遍历整个图寻找要填的空格了. ...
- POJ2676-Sudoku(数独)
想了好久没想到好的解决办法,参考了 http://user.qzone.qq.com/289065406/blog/1303713313 大致题意: 九宫格问题,也有人叫数独问题 把一个9行9列的网格 ...
- 软件工程实践_Task2_sudoku
软工实践_Task2 标签(空格分隔): 软工实践 相关要求:第二次作业--个人项目实战 github:传送门 解题思路 先是一点杂谈. 首先,看完作业要求之后,心里先有个大概的框架. 语言:C++ ...
- 洛谷P1784 数独
To 洛谷.1784 数独(类似(或者说相同)题:CODEVS.4966 简单数独(4*4数独) CODEVS.2924 数独挑战) 题目描述 数独是根据9×9盘面上的已知数字,推理出所有剩余空格的数 ...
- poj2676 Sudoku(DFS)
做了很久还是参考了别人的答案orz,其实也不难啊.我要开始学一下怎么写搜索了... 题目链接:poj2676 Sudoku 题解:暴力搜索,DFS每个空白格子所放数字. #include<cst ...
随机推荐
- GNSS数据下载网站
Bernese 数据表文件下载 rinex文件下载 ftp://nfs.kasi.re.kr DCB.ION文件ftp://ftp.unibe.ch/AIUB/CODE/ 下载5.0更新文件 ftp: ...
- HDU_1063_Exponentiation_大数
Exponentiation Time Limit: 2000/500 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- CDR如何使用钢笔工具进行完美抠图?【6·18特惠倒计时!】
不要以为抠图只能在图像处理软件中实现,矢量图形绘制软件CorelDRAW一样可以,而且方法很多,文章介绍使用CDR钢笔工具抠图的方法. 提示说明: 首先说明一下,CDR中的钢笔工具和其他平面设计软件中 ...
- 控制台输出(System.out.printf)的使用
一. 介绍 System.out.printf 与 C语言中的 printf 使用方法类似,可以向控制台(Console) 输出指定格式的内容.使用 System.out.printf 的方法比使 ...
- 【JavaScript进阶】深入理解JavaScript中ES6的Promise的作用并实现一个自己的Promise
1.Promise的基本使用 // 需求分析: 封装一个方法用于读取文件路径,返回文件内容 const fs = require('fs'); const path = require('path') ...
- The meaning of the number displayed on the man page in Linux
0 Header files 0p Header files (POSIX) 1 Executable programs or shell commands 1p Executable program ...
- 【模板】Manacher 回文串
推荐两个讲得很好的博客: http://blog.sina.com.cn/s/blog_70811e1a01014esn.html https://segmentfault.com/a/1190000 ...
- Flask-SQLAlchemy中解决1366报错
会报下面这个1366的错 安装MySQL驱动(我升级过Python,所以要再装一遍) 本想安装MySQL官方驱动mysql-connector-python的,然而官方目前只支持到3.4 我又懒,所以 ...
- rpm包下载地址
https://dl.fedoraproject.org/pub/epel/6/x86_64/
- selenium等待
简介 在selenium操作浏览器的过程中,每一次请求url,selenium都会等待页面加载完成以后, 才会将操作权限在交给我们的程序. 但是,由于ajax和各种JS代码的异步加载问题,当一个页面被 ...