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 ...
随机推荐
- hdu,1028,整数拆分的理解
#include"iostream"using namespace std;int main() { int n,i,j,k; int c[122],temp[122]; //c[ ...
- java中“53”个关键字(含2个保留字)
1.java的关键字(keyword)有多少个? 51+2个保留字=53个关键字(java的关键字都是小写的!!) 2.java的保留字(reserve word)有多少个?问题:分别是什么? 2个保 ...
- CAD在网页中返回当前图纸的最小外包矩形框
主要用到函数说明: _DMxDrawX::GetMcDbDatabaseBound 返回当前图纸的最小外包矩形框,详细说明如下: 参数 说明 DOUBLE* pLbx 返回最小外包矩形框左下角X值 D ...
- ie9以下提示用户升级浏览器
<!--[if lt IE 9]> <div style='border: 4px solid #FFF500; background: #FDFDC8; text-align: c ...
- openstack——horizon篇
一.horizon 介绍: 理解 horizon Horizon 为 Openstack 提供一个 WEB 前端的管理界面 (UI 服务 )通过 Horizone 所提供的 DashB ...
- python 简单简绍以及简单的语法
一.Pthon介绍 Pyhton的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆在阿姆斯特丹打发时间,决心开发一款新的脚本解释程序,作为ABC语言的 ...
- 48.cartinality的基本用法
主要知识点 cartinality的用法 es去重用的是cartinality metric算法,对每个bucket中的指定的field进行去重,然后获取去重后的count,类似于count( ...
- c#获取文字全拼音
class Program { /// <summary> /// 获得拼音 /// </summary> /// <param name="str_Spell ...
- vue 使用插件
上传加载 :vue-infinite-loading
- 【codeforces 801D】Volatile Kite
[题目链接]:http://codeforces.com/contest/801/problem/D [题意] 给你一个凸多边形的n个点; 然后允许你将每个点移动到距离不超过D的范围内; 要求无论如何 ...