题目链接: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. mysql中如何查询最近24小时、top n查询

    MySQL中如何查询最近24小时. where visittime >= NOW() - interval 1 hour; 昨天. where visittime between CURDATE ...

  2. 如何把你的Windows PC变成瘦客户机

    越来越多的用户开始使用vmware view 4.5来做为企业桌面虚拟化的平台,通过view,所有的管理工作都转移到数据中心,但是考虑到成本原因,很多人员还在使用PC机,有没有办法将PC机变成瘦客户机 ...

  3. SeaGlass:手工搭建伪基站监控系统

    “伪基站”即假基站,设备一般由主机和笔记本电脑或手机组成,通过短信群发器.短信发信机等相关设备能够搜取以其为中心.一定半径范围内的手机卡信息,利用2G移动通信的缺陷,通过伪装成运营商的基站,冒用他人手 ...

  4. 【Nginx】基本数据结构

    整型的封装 typedef intptr_t ngx_int _t;//有符号整型 typedef uintptr_t ngx_uint_t;//无符号整型 字符串的封装 typedef struct ...

  5. Python中解决中文乱码问题

    乱码原因:因为你的文件声明为utf-8,并且也应该是用utf-8的编码保存的源文件.但是windows的本地默认编码是cp936,也就是gbk编码,所以在控制台直接打印utf-8的字符串当然是乱码了. ...

  6. IntelliJ IDEA 使用maven 集成SpringMVC+Hibernate

    准备工作: 安装idea intellij 安装jdk1.8,配好环境变量 安装tomcat 7 准备工作完成之后,就开始创建项目了 创建项目 1.File–>new project–>选 ...

  7. Random产生随机数问题

    昨天在开发时发现这个问题,在同一个for循环内,通过Random多次产生随机数得到的随机数竟是一样的!以前还真没发现这个问题. 以下是简化的代码,如果将random定义在for循环外面则不会有问题(猜 ...

  8. What to do about Eclipse's “No repository found containing: …” error messages?

    As Mauro said: "you have to remove and re-add the Eclipse Project Update site, so that its meta ...

  9. 初探active mq

    mq(message queue),即消息队列,目前比较流行消息队列是active mq 和kafka.本文介绍如何简单的使用active mq. ActiveMQ官网下载地址:http://acti ...

  10. mouseout和mouseover、mouseenter和mouseleave

          在前端开发中经常会碰到当鼠标放到一个元素上时会弹出你一个元素,鼠标离开那个弹出元素后隐藏.这类效果一般要用到一些鼠标事件,一类是mouseout和mouseover,另一类是mouseen ...