蓝桥杯校内选拔赛/POJ 数独(深搜)
Time Limit: 2000MS | Memory Limit: 65536K | |||
Total Submissions: 14530 | Accepted: 7178 | 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
搜索时要对行,列,每个小数独阵进行判断,判断该数字是否在这三个中出现过,是否出现用标识符标记,处理时i,j从下标0开始,处理行标,列标比较方便。思路较简单,看代码吧。
#include<iostream>
#include<cstdio>
#include<cstring>
#define MAXN 12
using namespace std;
int num[MAXN][MAXN];
int row[MAXN][MAXN];//用来标记每一行九个数是否已被使用,使用记为1
int col[MAXN][MAXN];//列
int mar[MAXN][MAXN];//用0-8标识9个小数独矩阵
char chr[MAXN][MAXN];
bool flag=false;
void dfs(int m,int n)
{
int s,i,j; if(m==&&n==)
{
for(i=;i<=;i++)
{
for(j=;j<=;j++)
{
cout<<num[i][j];
}
cout<<endl;
}
flag=true;
}
else
{
if(num[m][n]!=)
{
if(n<=)
dfs(m,n+);
else
dfs(m+,);
}
else
{
for(i=;i<=;i++)
{
if(row[m][i]==&&col[n][i]==&&mar[m/*+n/][i]==)//根据i,j标定它所属的行,列,和所在的小矩阵
{
s=m/*+n/;
num[m][n]=i;
row[m][i]=;
col[n][i]=;
mar[s][i]=;
if(n<=)
dfs(m,n+);
else
dfs(m+,);
if(flag)
return ;
num[m][n]=;//一旦回溯过来,必须重新置0,因为说明此数字对于后面的搜索产生了不满足,故将其置0.
row[m][i]=;
col[n][i]=;
mar[s][i]=;
}
}
}
}
}
int main()
{
//freopen("data.in","r",stdin);
// freopen("data.out","w",stdout);
int i,j,s,t;
cin>>t;
while(t--)
{
memset(row,,sizeof(row));
memset(col,,sizeof(col));
memset(mar,,sizeof(mar));
for(i=;i<;i++)
scanf("%s",chr[i]);
for(i=;i<;i++)
for(j=;j<;j++)
{
num[i][j]=chr[i][j]-'';
s=num[i][j];
if(s!=)
{
row[i][s]=;
col[j][s]=;
mar[i/*+j/][s]=;//初始,一旦有数字,则要将它所在的行列及小矩阵标为1
}
}
flag=false;
dfs(,);
}
return ;
}
蓝桥杯校内选拔赛/POJ 数独(深搜)的更多相关文章
- 2013 蓝桥杯校内选拔赛 java本科B组(题目+答案)
一.标题:正则表示 正则表达式表示了串的某种规则或规律.恰当地使用正则表达式,可以使得代码简洁.事半功倍.java的很多API都支持正则表达式作为参数.其中的String.split就是这样. ...
- 记 2019蓝桥杯校内预选赛(JAVA组) 赛后总结
引言 好像博客好久没更新了 哈哈哈哈哈 趁现在有空更新一波 不知道还有没有人看 确实该记录一下每天做了什么了 不然感觉有些浑浑噩噩了 比赛介绍 全称: 蓝桥杯全国软件和信息技术专业人才大赛 蓝桥杯 实 ...
- POJ 1190(深搜)
http://poj.org/problem?id=1190 又有好久没做搜索的题了,没想到做一个卡了我那么久,想哭啊. 一个中文题,思路呢也就是搜索呗,一层一层往上面搜,不过这里有两个比较重要的地方 ...
- [NOIP2009]靶形数独 深搜+枝杈优化
这道题,又是一位玄学搜索...... 我是用的蜗牛序搜的(顾名思义,@,这么搜),我正着搜80然后一反转比原来快了几十倍........一下AC....... 我的思路是这样的话我们可以从内到外或者从 ...
- 第五届蓝桥杯校内选拔第六题_(dfs)
你一定听说过“数独”游戏.如[图1.png],玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个同色九宫内的数字均含1-9,不重复. 数独的答案都是唯一的,所以 ...
- (hdu)5547 Sudoku (4*4方格的 数独 深搜)
Problem Description Yi Sima was one of the best counselors of Cao Cao. He likes to play a funny game ...
- POJ 2531 深搜剪枝
题意:全局最大割. 分析:有相应的算法,数据量很小,可以枚举源点,汇点,最大流. 这里用DFS,状态定义:分成两个集合,刚开始S集合全部点,然后一个一个放,这是一个回溯的过程. 没剪枝也过了. 剪枝技 ...
- 第五届蓝桥杯校内选拔第七题_(树型dp)
G将军有一支训练有素的军队,这个军队除开G将军外,每名士兵都有一个直接上级(可能是其他士兵,也可能是G将军).现在G将军将接受一个特别的任务,需要派遣一部分士兵(至少一个)组成一个敢死队,为了增加敢死 ...
- POJ 1321 深搜dfs
思路其实挺简单的,为什么我想不到呢!!! 原因分析:(1)题目还是做少了 (2)做题目的时候在放音乐 (3)最近脑袋都不愿意想思路总是想一些无用的 改进:(1)以后做题目坚决不开音乐,QQ直接挂隐身 ...
随机推荐
- innerHTML outerHTML innerText
迁移时间--2017年10月31日14:52:59 Author:Marydon UpdateTime--2017年1月15日20:33:03innerHTML,outerHTML与innerTe ...
- 新建 .NET Core 控制台项目 C# 数组深拷贝
新建 .NET Core 控制台项目 1. 安装 .NET Core SDK 1.0 参考微软官方网站 https://www.microsoft.com/net/download/windows 2 ...
- C语言函数的递归和调用
函数记住两点: (1)每个函数运行完才会返回调用它的函数:每个函数运行完才会返回调用它的函数,因此,你可以先看看这个函数不自我调用的条件,也就是fun()中if条件不成立的时候,对吧,不成立的时候就是 ...
- 数据库如何让自增id重置
sql语句:truncate tablename; 会清空表的所有记录,并且使自增的id重置. 另外,navicat的截断表,就是这个功能. 它的清空表只会清空数据,不能使自增的id重置.
- CentOS Linux搭建独立SVN Server全套流程(转)
环境为centos6.3 1.首先 看看机器上安装了svn了没有 rpm -qa |grep svn 2.如果没有安装 执行 yum -y install subversion 3.安装好了之后 新建 ...
- 浅析嵌入式C优化技巧
嵌入式C语言优化小技巧 1 概述 嵌入式系统是指完毕一种或几种特定功能的计算机系统,具有自己主动化程度高,响应速度快等长处,眼下已广泛应用于消费电子,工业控制等领域.嵌入式系统受其使用的硬件以及运行环 ...
- js实现网页端复制功能
实现网页端复制功能: <div id="copyInput" style="display:none;"> <form> <inp ...
- 话说Session
Session这个概念,对于搞软件的来说,再熟悉不过了.就拿我来说,Hibernate, Shiro, Spring, JSP, Web Server等等,全都涉及到Session. 不怕笑话,一直都 ...
- Angularv4入门篇1
国庆时按照官网的tutorial写了遍官方示例,一知半解,不明白angular的服务的服务为何要单独抽离出来.angular应用是如何启用的.近期打算看下angular的文档部分,然后梳理遍以理解an ...
- 游戏开发之基础图像---3d图像处理
http://dev.gameres.com/Program/Visual/3D/3Darit.htm float 类型数据有效数字是小数点后面6位 单精度 doluble 类型数据是至少10位,双精 ...