POJ 2676
http://poj.org/problem?id=2676
深搜的题目。
题意呢就是一个数独的游戏,应该都知道规则。
思路:我的思路很简单,就是用数组来判断某个数字是否可以使用,而每一个数字都由三个条件来限制它,分别是行和列,和其所在的9宫格里面,是不能有重复的。
如果有重复的,则不能使用,甚至都不能尝试。
代码写的也比较渣。还有这个题的数据应该不深,从0,0搜和从8,8开始搜,时间差距非常大,我的从0,0开始是1200Ms,从8,8是16Ms.
这是数据的问题。
#include <stdio.h>
#include <string.h> int sodu[][],flog; char a[][]; bool h[][],s[][],cube[][]; //h代表行,s代表列,cube代表数字所在的的是哪一个9宫格。 int jud(int x) //用来判断数字是在哪一个9宫格,我的分区是按从0 1 2/3 4 5/6 7 8来分的。
{
if(x>=&&x<) return ;
if(x>=) return ;
return ;
} void bfs(int x,int y)
{
for(int q=;q>=;q--) //这个是来判断是否搜索成功。
{
flog=;
for(int p=;p>=;p--)
{
if(sodu[q][p]==) {flog=;break;}
if(flog&&p==&&q==) flog=;
}
if(flog==) break;
}
for(int i=;i>=&&flog;i--)
for(int j=;j>=;j--)
{
if(sodu[i][j]==)
{
for(int k=;k<;k++)
{
if(h[i][k]&&s[j][k]&&cube[j/+jud(i)][k])
{
sodu[i][j]=k;
h[i][k]=false;
s[j][k]=false;
cube[j/+jud(i)][k]=false;
bfs(,);
if(flog==)return;
h[i][k]=true;
s[j][k]=true;
cube[j/+jud(i)][k]=true;
}
}
sodu[i][j]=; //这里记得要归0,不然回溯的时候,下一次不会再这个数值。
if(sodu[i][j]==)return;
}
}
} int main()
{
int n;
scanf("%d",&n);
while(n--)
{
for(int i=;i<;i++)
scanf("%s",a[i]);
for(int i=;i<;i++)
for(int j=;j<;j++)
sodu[i][j]=a[i][j]-'';
memset(h,true,sizeof(h));
memset(s,true,sizeof(s));
memset(cube,true,sizeof(cube));
for(int i=;i<;i++)
for(int j=;j<;j++)
{
if(sodu[i][j]!=)
{
h[i][sodu[i][j]]=false;
s[j][sodu[i][j]]=false;
cube[j/+jud(i)][sodu[i][j]]=false;
}
}
flog=;
bfs(,);
for(int i=;i<;i++)
{
for(int j=;j<;j++)
printf("%d",sodu[i][j]);
printf("\n");
} }
return ;
}
POJ 2676的更多相关文章
- ACM : POJ 2676 SudoKu DFS - 数独
SudoKu Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu POJ 2676 Descr ...
- 深搜+回溯 POJ 2676 Sudoku
POJ 2676 Sudoku Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 17627 Accepted: 8538 ...
- 随手练——POJ - 2676 数独 (回溯法)
POJ - 2676 : http://poj.org/problem?id=2676: 解题思想 (大力出奇迹): 1. 依次在空格里面填上“1~9”,并检查这个数字是否合法(其所在的行.列,以及3 ...
- 搜索 --- 数独求解 POJ 2676 Sudoku
Sudoku Problem's Link: http://poj.org/problem?id=2676 Mean: 略 analyse: 记录所有空位置,判断当前空位置是否可以填某个数,然后直 ...
- poj 2676 Sudoku ( dfs )
dfs 用的还是不行啊,做题还是得看别人的博客!!! 题目:http://poj.org/problem?id=2676 题意:把一个9行9列的网格,再细分为9个3*3的子网格,要求每行.每列.每个子 ...
- 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 ...
- 【POJ 2676】 Sudoku
[题目链接] http://poj.org/problem?id=2676 [算法] 深度优先搜索 [代码] #include <algorithm> #include <bitse ...
- POJ 2676/2918 数独(dfs)
思路:记录每行每列每一个宫已经出现的数字就可以.数据比較弱 另外POJ 3074 3076 必须用剪枝策略.但实现较麻烦,还是以后学了DLX再来做吧 //Accepted 160K 0MS #incl ...
随机推荐
- Java中符号位扩展
第一个例子: byte b=-100;b在内存中是以补码的形式存贮的:1001 1100 如果执行char c=(char)b;如3楼企鹅先生所说:b要先变为int,这时增加的位全要用b的符号位填充( ...
- R语言画图实例-参考R语言实战
dose <- c(, , , ,) drugA <- c(, , , , ) drugB <- c(, , , , ) # 数据准备 opar <- par(no.reado ...
- Java实验1-文件IO
目标:掌握Java类的创建,Java I/O操作,Java集合类的使用等 内容: 王老师非常喜欢读书,为了便于查阅,他每次买书回家后就在笔记本上登记每本书的详细信息(书名.作者.出版社.出版日期.价 ...
- java读写excel文件
近期处理的数据规模比较大,正好又是统计合并的事情,想着借助excel就可以完成了,然后就了解了下java读取excel的事情. 读取的文件主要分两类:xls文件.xlsx文件.xls文件的相关操作用的 ...
- Myeclipse右键新建项目突然变的很少
额,很是焦躁,最后在界面的右上方点Myeclipse Java enterprise变回原来模样
- 开始使用pycharm了
我将python的主力开发工具从eclipse+pydev切换到pycharm社区版了. 选择pycharm 的原因:1. pycharm可以实时按照pep8的规范检查code style和namin ...
- Java 中JOptionPane的基本使用方法
JOptionPane 有助于方便地弹出要求用户提供值或向其发出通知的标准对话框.但是有时候看看API也特别烦,因为方法多,参数多,特别难记忆.这里我给出几种常用的方法供大家参考. (1) publi ...
- 繁华模拟赛day8 牛栏
/* 标称并没有用到题解中提到的那种奇妙的性质,我们可以证明,正常从1开始走的话,需要T次,如何使这个次数减小?题解中提到一个办法,有一步小于n/t,我们考虑这一步,如果把它匀到左右两步中,则可以减小 ...
- 微信电脑版即将到来了 安装QQ浏览器微信版体验吧
之前说过在手机上微信打字慢,tx最终还是想开了,最近TX邀请测试微信电脑版,想要尝鲜的朋友可以去exp.qq.com申请QQ浏览器微信版体验,不过体验将要结束了,相信正式版很快就要出来了.[微信网页版 ...
- 怎样更改wordpress登陆 URL防止恶意注册
WP 默认的登陆 URL 是 wp-login.php或wp-admin.php,许多spamer会根据这些footprint来收集可注册的wordpress站点,然后你的站内就多出许多垃圾评论.如果 ...