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)的更多相关文章

  1. ACM : POJ 2676 SudoKu DFS - 数独

    SudoKu Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu POJ 2676 Descr ...

  2. ACM: ICPC/CCPC Sudoku DFS - 数独

    Sudoku Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/65535K (Java/Other) Total Submis ...

  3. HDU 5547 Sudoku(DFS)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=5547 题目: Sudoku Time Limit: 3000/1000 MS (Java/Others ...

  4. poj 2676 Sudoku ( dfs )

    dfs 用的还是不行啊,做题还是得看别人的博客!!! 题目:http://poj.org/problem?id=2676 题意:把一个9行9列的网格,再细分为9个3*3的子网格,要求每行.每列.每个子 ...

  5. POJ2676 Sudoku(dfs)

    题目链接. 题目大意: 就是数独游戏.横竖,每一个9宫方块,必须有1~9,且不重复. 分析: 直接DFS.一开始在原图上搜,会TLE.把要补全的空格,放入数组,这样就不用遍历整个图寻找要填的空格了. ...

  6. POJ2676-Sudoku(数独)

    想了好久没想到好的解决办法,参考了 http://user.qzone.qq.com/289065406/blog/1303713313 大致题意: 九宫格问题,也有人叫数独问题 把一个9行9列的网格 ...

  7. 软件工程实践_Task2_sudoku

    软工实践_Task2 标签(空格分隔): 软工实践 相关要求:第二次作业--个人项目实战 github:传送门 解题思路 先是一点杂谈. 首先,看完作业要求之后,心里先有个大概的框架. 语言:C++ ...

  8. 洛谷P1784 数独

    To 洛谷.1784 数独(类似(或者说相同)题:CODEVS.4966 简单数独(4*4数独) CODEVS.2924 数独挑战) 题目描述 数独是根据9×9盘面上的已知数字,推理出所有剩余空格的数 ...

  9. poj2676 Sudoku(DFS)

    做了很久还是参考了别人的答案orz,其实也不难啊.我要开始学一下怎么写搜索了... 题目链接:poj2676 Sudoku 题解:暴力搜索,DFS每个空白格子所放数字. #include<cst ...

随机推荐

  1. vue 与 angular 的区别

    vue仅仅是mvvm中的view层,只是一个如jquery般的工具库,而不是框架,而angular而是mvvm框架. vue的双向邦定是基于ES5 中的 getter/setter来实现的,而angu ...

  2. netperf使用指南

    1. 介绍: Netperf是由惠普公司开发的,测试网络栈.即测试不同类型的网络性能的benchmark工具,大多数网络类型TCP/UPD端对端的性能,得到网络上不同类型流量的性能参数.Netperf ...

  3. SGU100

    Read integers A and B from input file and write their sum in output file. Input Input file contains ...

  4. Oracle query that count connections by minute with start and end times provided

    数据结构类似 SQL> select * from t; B                 E                 N ----------------- ------------ ...

  5. STL源码分析之内存池

    前言 上一节只分析了第二级配置器是由多个链表来存放相同内存大小, 当没有空间的时候就向内存池索取就行了, 却没有具体分析内存池是怎么保存空间的, 是不是内存池真的有用不完的内存, 本节我们就具体来分析 ...

  6. 水图(牛客练习赛(DFS搜索))

    题意: 小w不会离散数学,所以她van的图论游戏是送分的 小w有一张n个点n-1条边的无向联通图,每个点编号为1~n,每条边都有一个长度小w现在在点x上她想知道从点x出发经过每个点至少一次,最少需要走 ...

  7. 集群管理软件clustershell

    一.简介 1.安装方便.一条指令就能轻松安装. 2.配置方便.很多集群管理软件都需要在所有的服务器上都安装软件,而且还要进行很多的连接操作,clustershell就相当的方便了,仅仅需要所有机器能够 ...

  8. noip模拟赛 计数

    [问题描述] 给出m个数a[1],a[2],…,a[m] 求1~n中有多少数不是a[1],a[2],…,a[m]的倍数. [输入] 输入文件名为count.in. 第一行,包含两个整数:n,m 第二行 ...

  9. nyoj_171_聪明的kk_201402281518

    聪明的kk时间限制:1000 ms  |  内存限制:65535 KB 难度:3描述 聪明的“KK”非洲某国展馆的设计灵感源于富有传奇色彩的沙漠中陡然起伏的沙丘,体现出本国不断变换和绚丽多彩的自然风光 ...

  10. POJ——T 1160 Post Office

    http://poj.org/problem?id=1160 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20218   ...