POJ 2676 数独(DFS)
Time Limit: 2000MS | Memory Limit: 65536K | |||
Total Submissions: 21612 | Accepted: 10274 | Special Judge |
Description
Input
Output
Sample Input
1
103000509
002109400
000704000
300502006
060000050
700803004
000401000
009205800
804000107
Sample Output
143628579
572139468
986754231
391542786
468917352
725863914
237481695
619275843
854396127
Source
题意:把一个9行9列的网格,再细分为9个3*3的子网格,要求每行、每列、每个子网格内都只能使用一次1~9中的一个数字,即每行、每列、每个子网格内都不允许出现相同的数字,填完数独。
分析:直接搜索,标记行、列、块,值得一提的是倒着搜比正着搜效率高出许多,这也算是一个技巧。
代码:
////#include "bits/stdc++.h"
#include "cstdio"
#include "map"
#include "set"
#include "cmath"
#include "queue"
#include "vector"
#include "string"
#include "cstring"
#include "time.h"
#include "iostream"
#include "stdlib.h"
#include "algorithm"
#define db double
#define ll long long
#define vec vector<ll>
#define Mt vector<vec>
#define ci(x) scanf("%d",&x)
#define cd(x) scanf("%lf",&x)
#define cl(x) scanf("%lld",&x)
#define pi(x) printf("%d\n",x)
#define pd(x) printf("%f\n",x)
#define pl(x) printf("%lld\n",x)
#define rep(i, x, y) for(int i=x;i<=y;i++)
const int N = 1e6 + ;
const int mod = 1e9 + ;
const int MOD = mod - ;
const db eps = 1e-;
const db PI = acos(-1.0);
using namespace std;
int t; int R()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
char s[][];
int a[][];
bool ok(int ans,int x,int y)
{
for(int i=;i<;i++)
if(a[i][y]==ans) return ;
for(int i=;i<;i++)
if(a[x][i]==ans) return ;
int xx=x-x%,yy=y-y%;
for(int i=xx;i<xx+;i++)
for(int j=yy;j<yy+;j++)
if(a[i][j]==ans) return ;
return ;
}
bool okk=;
void dfs(int x,int y,int cnt)
{
if(cnt==){
okk=;//满足条件后立刻结束,并标记
return;
}
while(a[x][y]){
if(y==) x++,y=;
else y++;
if(x==) {okk=;return;}//满足条件后立刻结束,并标记
}
for(int i=;i<=;i++){
if(ok(i,x,y)){
a[x][y]=i;
if(y==) dfs(x+,,cnt+);
else dfs(x,y+,cnt+);
if(okk) return;//满足条件后立刻结束
a[x][y]=;
}
}
return;
}
int main()
{
t=R();
while(t--)
{
int cnt=;
memset(a,, sizeof(a));
memset(s,, sizeof(s));
okk=;
for(int i=;i<;i++)
{
scanf("%s",s[i]);
for(int j=;j<;j++){
a[i][j]=s[i][j]-'';
if(!a[i][j]) cnt--;
}
}
dfs(,,cnt);//输出即为满足条件的,结束后的情况。
for(int i=;i<;i++){
for(int j=;j<;j++){
printf("%d",a[i][j]);
}
puts("");
}
}
}
POJ 2676 数独(DFS)的更多相关文章
- POJ 2676 数独+dfs深搜
数独 #include "cstdio" #include "cstring" #include "cstdlib" #include &q ...
- ACM : POJ 2676 SudoKu DFS - 数独
SudoKu Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu POJ 2676 Descr ...
- 随手练——POJ - 2676 数独 (回溯法)
POJ - 2676 : http://poj.org/problem?id=2676: 解题思想 (大力出奇迹): 1. 依次在空格里面填上“1~9”,并检查这个数字是否合法(其所在的行.列,以及3 ...
- poj 2676 数独问题 dfs
题意:完成数独程序,数独要求每行每列且每个3*3矩阵都必须是1~9的数字组成. 思路:dfs 用row[i][n] 记录第i行n存在 用col[j][n] 记录第j列n存在 grid[k][n] 记 ...
- poj 2676 Sudoku ( dfs )
dfs 用的还是不行啊,做题还是得看别人的博客!!! 题目:http://poj.org/problem?id=2676 题意:把一个9行9列的网格,再细分为9个3*3的子网格,要求每行.每列.每个子 ...
- 深搜+回溯 POJ 2676 Sudoku
POJ 2676 Sudoku Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 17627 Accepted: 8538 ...
- POJ.3172 Scales (DFS)
POJ.3172 Scales (DFS) 题意分析 一开始没看数据范围,上来直接01背包写的.RE后看数据范围吓死了.然后写了个2^1000的DFS,妥妥的T. 后来想到了预处理前缀和的方法.细节以 ...
- POJ 2676 Sudoku (数独 DFS)
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 14368 Accepted: 7102 Special Judg ...
- POJ 2676 - Sudoku - [蓝桥杯 数独][DFS]
题目链接:http://poj.org/problem?id=2676 Time Limit: 2000MS Memory Limit: 65536K Description Sudoku is a ...
随机推荐
- Linux 两组信号对比
博客逐步迁移到,独立博客,原文地址 http://www.woniubi.cn/two_groups_signal_difference/ 之前看信号的时候,没有太注意不同信号的对比.今天再次看到的时 ...
- Mat转化为IplImage类型的方法
Mat image_mat; IplImage imgTmp = image_mat; IplImage *img = cvCloneImage(&imgTmp);
- JavaScript基础:字符串转换函数——String()和toString()
1..toString()可以将所有的的数据都转换为字符串,但是要排除null 和 undefined 例如将false转为字符串类型 <script> var str = false ...
- 1、HDFS分布式文件系统
1.HDFS分布式文件系统 分布式存储 分布式计算 2.hadoop hadoop含有四个模块,分别是 common. hdfs和yarn. common 公共模块. HDFS hadoop dist ...
- [转载]弹出一个不带地址栏、工具栏的IE非模态窗口
标签:ie /非模态窗口 window.open(url,'_blank','menubar=no,fullscreen=1,toolbar=no,resizable=no,location=no,s ...
- Firefox浏览器 页面滑动卡帧问题
在设置里关闭"平滑滚动"选项即可,猎豹似乎没有,遭黑
- IOS 公司标示和方向域名
1. 公司标示使用反向域名========================================正向域名 www.baidu.com 用来标示一台网络主机反向域名 cn.itcast.Myd ...
- IOS xcode常用的快捷键
新建 shift + cmd + n 新建项目 cmd + n 新建文件 视图 option + cmd + 回车 打开助理编辑器 cmd + 回车 ...
- LayoutParams布局
AbsoluteLayout.LayoutParams可以重新设置坐标,然后调用setLayoutParamsLinearLayout.LayoutParams可以调用setMargins();来移动 ...
- window/win7/wamp下安装Xdebug
1.写一个php文件,输出phpinfo(); 然后把该页面Ctrl+A全选,然后贴到http://xdebug.org/wizard.php这个地址的文本框里,他会自动检查你的配置,然后告诉你用哪个 ...