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 ...
随机推荐
- Excel 解析 (大文件读取)BingExcel
最近在整理一个excel读取与写出的orm框架.使用的saxreader方式,支持百万级别的excel读取. 并且在通常使用中提供了监听的读取方式.如感兴趣的朋友可以稍微了解下 ,项目地址https: ...
- u-boot分析(八)----串口初始化
u-boot分析(八) 上篇博文我们按照210的启动流程,分析到了内存初始化,今天我们继续按照u-boot的启动流程对串口的初始化进行分析. 今天我们会用到的文档: 1. 2440芯片手 ...
- 青石B2C商城
平台: Windows 类型: 虚拟机镜像 软件包: azure commercial ecbluestone ecommerce ecommerce solution 服务优惠价: 按服务商许可协议 ...
- SSM事务
问题描述:查询用户信息时想级联查出用户订单以及订单详情,在查询用户的时候JDBC是will be managed by Spring,但懒加载用户订单以及订单详情时就will not be manag ...
- Office加载项
出自我的个人主页 Alvin Blog 前言 前一段时间公司做了有关Excel 加载项的开发,也遇到了很多坑,所以在此记录一下,有两个原因,1.留给以后在用到加载项的时候,复习所用,避免 跳进同一个坑 ...
- 开源框架 epics,开源画面编辑软件 edm
epics Experimental Physics and Industrial Control System 一套开源软件框架,实验物理和工业控制系统 http://www.aps.anl.gov ...
- 从HTTP响应头判断是否命中CDN
腾讯云: X-Cache-Lookup:Hit From MemCache 表示命中CDN节点的内存X-Cache-Lookup:Hit From Disktank 表示命中CDN节点的磁盘X-Cac ...
- 在你的andorid设备上运行netcore (Linux Deploy)
最近注意到.net core 的新版本已经开始支持ARM 平台的CPU, 特意去Linux Deploy 中尝试了一下,真的可以运行 Welcome to Ubuntu 16.04 LTS (GNU/ ...
- 智能开关:orange pi one(arm linux)控制继电器
大家都知道,继电器是用小电流去控制大电流运作的一种“自动开关”,在我们生活.工作中随处可见.现在的“智能家居”概念,有很多功能模块其实就是“智能开关”,远程开关.定时开关.条件触发开关等等. 下面介绍 ...
- 【转载】#335 - Accessing a Derived Class Using a Base Class Variable
You can use a variable whose type is a base class to reference instances of a derived class. However ...