深搜+回溯 POJ 2676 Sudoku
POJ 2676 Sudoku
| Time Limit: 2000MS | Memory Limit: 65536K | |||
| Total Submissions: 17627 | Accepted: 8538 | 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
我的思路错误之处:我本来只设置了两个二维bool数组表示每行9个数字和每列9个数字,是否用过,再深搜填写9个方格,可是发现,深搜填写每个方格是很难写的。
正解:开是三个二维bool数组,分别表示每列每行每个大方格的数字的使用情况。
读入时注意数字是连起来的。
/*----------------正确代码-------------------------*/
#include<iostream>
using namespace std;
#include<cstdio>
#include<cstring>
#define N 15
char duru[N];
int jz[N][N];
bool flag=false,flagfg[N][N],flaghang[N][N],flaglie[N][N];
inline void input()
{
for(int i=;i<=;++i)
{
scanf("%s",duru+);/*注意读入的数字之间没有空格*/
for(int j=;j<=;++j)
{
jz[i][j]=duru[j]-'';
if(jz[i][j]==) continue;
int k=*((i-)/)+(j-)/+;
flagfg[k][jz[i][j]]=true;
flaghang[i][jz[i][j]]=true;
flaglie[j][jz[i][j]]=true;
}
}
}
void output()
{
for(int i=;i<=;++i)
{
for(int j=;j<=;++j)
printf("%d",jz[i][j]);
printf("\n");
}
}
void dfs(int x,int y)
{
if(x==)
{
flag=true;
return;
}
if(jz[x][y])
{
if(y==)
dfs(x+,);
else dfs(x,y+);
if(flag) return;
}
else {
int k=*((x-)/)+(y-)/+;
for(int i=;i<=;++i)
{
if(!flaghang[x][i]&&!flaglie[y][i]&&!flagfg[k][i])
{/*枚举符合三个条件的i*/
jz[x][y]=i;
flaghang[x][i]=true;
flaglie[y][i]=true;
flagfg[k][i]=true;
if(y==)
dfs(x+,);
else dfs(x,y+);
if(flag) return;
jz[x][y]=;/*回溯*/
flaghang[x][i]=false;
flaglie[y][i]=false;
flagfg[k][i]=false; }
}
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
input();
dfs(,);
output();
memset(jz,,sizeof(jz));
memset(flagfg,false,sizeof(flagfg));
memset(flaghang,false,sizeof(flaghang));
memset(flaglie,false,sizeof(flaglie));
flag=false;
}
return ;
}
深搜+回溯 POJ 2676 Sudoku的更多相关文章
- HDU5723 Abandoned country (最小生成树+深搜回溯法)
Description An abandoned country has n(n≤100000) villages which are numbered from 1 to n. Since aban ...
- ****Curling 2.0(深搜+回溯)
Curling 2.0 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) Total ...
- ACM : POJ 2676 SudoKu DFS - 数独
SudoKu Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu POJ 2676 Descr ...
- The 2016 ACM-ICPC Asia China-Final L World Cup(深搜+回溯 暴力求解)
题目分析: 对于A,B,C,D四支队伍,两两之间进行一场比赛,获胜得3分,平局得1分,失败不得分,现在对给出的四个队伍的得分,判断能否满足得到这种分数,且方案唯一输出yes,不唯一输出no,不可能则输 ...
- UVA 165 Stamps (DFS深搜回溯)
Stamps The government of Nova Mareterrania requires that various legal documents have stamps attac ...
- POJ 2676 Sudoku(深搜)
Sudoku Time Limit : 4000/2000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) Total Submi ...
- POJ - 2676 Sudoku 数独游戏 dfs神奇的反搜
Sudoku Sudoku is a very simple task. A square table with 9 rows and 9 columns is divided to 9 smalle ...
- POJ 2488 A Knight's Journey(深搜+回溯)
A Knight's Journey Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) ...
- 搜索 --- 数独求解 POJ 2676 Sudoku
Sudoku Problem's Link: http://poj.org/problem?id=2676 Mean: 略 analyse: 记录所有空位置,判断当前空位置是否可以填某个数,然后直 ...
随机推荐
- (转)x11vnc配置--ubuntu14.04
原文网址:http://www.cnblogs.com/elmaple/p/4354814.html x11vnc是连接到真实的X会话,相比vnc4server和tightvncserver自己创建不 ...
- [moka学习笔记]yii2.0数据库查询的多种方法(未完待整理)
方法一:(使用model) $modelCommunityMail = CommunityMail::find()->where(['com_id'=>$id])->all(); 方 ...
- nginx服务器是怎么执行php脚本的?
简单的说: fastCGI是nginx和php之间的一个通信接口,该接口实际处理过程通过启动php-fpm进程来解 析php脚本,即php-fpm相 当于一个动态应用服务器,从而实现nginx动态解析 ...
- 功放AUX接口解析
功放上的AUX输入端口就是音频输入端口,用来连接音频输出设备:PC机上声卡.MP3播放器.CD机等
- winform(容器、打印、对话框)
一.布局:2个属性:Anchor:锁定位置Dock:填充位置一般Dock是与容器控件配合使用 二.容器控件:Panel:就是一个区域,类似于DIV,可以独立布局,还可以让其它控件及容器在它的内部再次布 ...
- mybatis hellworld
用maven来进行搭建项目的~~ 1. 搭建环境 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" x ...
- angularJS中的$apply(),$digest(),$watch()
$apply()和$digest()在AngularJS中是两个核心概念,但是有时候它们又让人困惑.而为了了解AngularJS的工作方式,首先需要了解$apply()和$digest()是如何工作的 ...
- Button 对 TreeView1 所有节点的全选
protected void Button1_Click(object sender, EventArgs e) { for (int i = 0; i < this.Tre ...
- 强大的UML建模工具——StarUML
用例图: usecase 生成时序图,协作图,活动图等 生成的时序图: 反向工程以及生成代码: 类图: ...
- PHP读取Excel文件内容
PHP读取Excel文件内容 项目需要读取Excel的内容,从百度搜索了下,主要有两个选择,第一个是PHPExcelReader,另外一个是PHPExcel. PHPExcelReader比较 ...