题目链接:http://poj.org/problem?id=2676

题意:9*9的方格,0代表没数字,其他代表数字,请在格子中填入1~9的数字,使得在每行,每列和每个3*3的方块中,1~9的数字每个都出现一次。

   如果解不唯一输出任意一组即可。

思路:只要满足上诉条件,暴力搜就可以通过了。

代码:

#include<iostream>
#include<cstring>
using namespace std; int mp[][]; ///九宫格 int row[][]; ///row[i][x] 标记在第i行中数字x是否出现了
int col[][]; ///col[j][y] 标记在第j列中数字y是否出现了
int grid[][]; ///grid[k][x] 标记在第k个3*3子格中数字z是否出现了 ///(这里说明的字母不代表下面程序中的变量) int DFS(int x,int y)
{
if(x==) return ; int flag=;
if(mp[x][y])
{
if(y==)flag=DFS(x+,);
else flag=DFS(x,y+);
if(flag) return ; ///回溯
else return ;
}
else
{
int k=*((x-)/)+(y-)/+;
for(int i=; i<=; i++) ///枚举数字1~9填空
if(!row[x][i] && !col[y][i] && !grid[k][i])
{
mp[x][y]=i; row[x][i]=;
col[y][i]=;
grid[k][i]=; if(y==) flag=DFS(x+,);
else flag=DFS(x,y+); if(!flag) ///回溯,继续枚举
{
mp[x][y]=;
row[x][i]=;
col[y][i]=;
grid[k][i]=;
}
else return ;
}
}
return ;
} int main(int i,int j)
{
int test;
cin>>test;
while(test--)
{
memset(row,,sizeof(row));
memset(col,,sizeof(col));
memset(grid,,sizeof(grid)); char MAP[][];
for(i=; i<=; i++)
for(j=; j<=; j++)
{
cin>>MAP[i][j];
mp[i][j]=MAP[i][j]-''; if(mp[i][j])
{
int k=*((i-)/)+(j-)/+;
row[i][ mp[i][j] ]=;
col[j][ mp[i][j] ]=;
grid[k][ mp[i][j] ]=;
}
} DFS(,);///最左上角个数开始搜索,是坐标 for(i=; i<=; i++)
{
for(j=; j<=; j++)
cout<<mp[i][j];
cout<<endl;
}
}
return ;
}

poj2676 Sudoku(搜索)的更多相关文章

  1. poj2676 Sudoku(DFS)

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

  2. 【POJ2676】sudoku 搜索

    按照每一行每一列去填数,当填到每一行的第9列时,开始填下一行. 代码如下: #include <cstdio> #include <algorithm> #include &l ...

  3. POJ2676 – Sudoku(数独)—DFS

    Sudoku Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 24081   Accepted: 11242   Specia ...

  4. poj2676 Sudoku

    Sudoku Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17953   Accepted: 8688   Special ...

  5. 【DLX算法】poj2676 Sudoku

    DLX算法求解精确覆盖问题模板.赛场上可以参见白书. #include<cstdio> #include<cstring> #include<vector> usi ...

  6. POJ2676 Sudoku(dfs)

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

  7. POJ2676 Sudoku [数独]

    好题,也非常有用,犯了几个错误 1.在枚举赋值的时候,思维有个错误:当当前的赋值不能填完这个数独,应该是继续下一个循环,而不是return false 终止枚举 2.Generic Programin ...

  8. POJ2676 Sudoku 舞蹈链 DLX

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目(传送门) 题意概括 给出一个残缺的数独,求解.SPJ 题解 DLX + 矩阵构建  (两个传送门) 代码 #includ ...

  9. 备战NOIP每周写题记录(一)···不间断更新

    ※Recorded By ksq2013 //其实这段时间写的题远远大于这篇博文中的内容,只不过那些数以百记的基础题目实在没必要写在blog上; ※week one 2016.7.18 Monday ...

随机推荐

  1. List和Map、Set的区别

    首先 List 和 Set 是存储单列数据的集合,Map 是存储键和值这样的双列数据的集合:List 中存储的数据是有顺序,并且允许重复:Map 中存储的数据是没有顺序的,其键是不能重复的,它的值是可 ...

  2. MySQLWorkbench里的稀奇事之timestamp的非空默认值

    在创建表时,某字段为非空时间戳,timestamp not null 问题来了,使用workbench建表时,如果值非空,是需要有一个默认值的,不然会报错. 那么,如果是更新时自动填充可以使用DEFA ...

  3. linux 下的特殊文件 /dev/null 和 /de/zero

    生成一个100Mb的文件 : time dd of=2Gb.file if=/dev/zero  bs=1024 count=100000 ubuntu 下测试磁盘的读写性能: 测试写: time d ...

  4. Puppet基于Master/Agent模式实现LNMP平台部署

    前言 随着IT行业的迅猛发展,传统的运维方式靠大量人力比较吃力,运维人员面对日益增长的服务器和运维工作,不得不把很多重复的.繁琐的工作利用自动化处理.前期我们介绍了运维自动化工具ansible的简单应 ...

  5. SQLite Expert表分离和解决SQLite Expert删除表后大小不变的问题

    最后要使用到号码归属地的查询,在网上找到一个数据库文件.大小有12M多,压缩成zip也有1.9M,这样对于一个apk的大小非常不利,后来看了一下数据库的内容,发现有非常多冗余.特别是中文字符占用非常大 ...

  6. asp.net mvc的权限管理设计

    现在集中展示用户-角色-权限管理的功能,因此,所有数据表一律简化处理.   1 后台管理效果 (1)角色管理 (2)权限管理   2 数据库设计(MSSQL) (1)用户表dbo.Users 项 类型 ...

  7. ASP.NET没有魔法——ASP.NET MVC Razor与View渲染 ASP.NET没有魔法——ASP.NET MVC界面美化及使用Bundle完成静态资源管理

    ASP.NET没有魔法——ASP.NET MVC Razor与View渲染   对于Web应用来说,它的界面是由浏览器根据HTML代码及其引用的相关资源进行渲染后展示给用户的结果,换句话说Web应用的 ...

  8. leetcode笔记:Majority Element

    一. 题目描写叙述 Given an array of size n, find the majority element. The majority element is the element t ...

  9. Ubuntu16.04 下python2 | python3

    在终端分别输入python,python2,python3 python和python2默认都是python2 python3才是python3 Ubuntu下是默认没有pip的,需要自己手动安装 s ...

  10. 【java】itoo项目实战之hibernate 懒载入优化性能

    在做itoo 3.0 的时候,考评系统想要上线,就開始导入数据了,仅仅导入学生2万条数据,可是导入的速度特别的慢.这个慢的原因是由于导入的时候进行了过多的IO操作.可是导入成功之后,查询学生的速度更加 ...