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的更多相关文章

  1. ACM : POJ 2676 SudoKu DFS - 数独

    SudoKu Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu POJ 2676 Descr ...

  2. 深搜+回溯 POJ 2676 Sudoku

    POJ 2676 Sudoku Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17627   Accepted: 8538 ...

  3. 随手练——POJ - 2676 数独 (回溯法)

    POJ - 2676 : http://poj.org/problem?id=2676: 解题思想 (大力出奇迹): 1. 依次在空格里面填上“1~9”,并检查这个数字是否合法(其所在的行.列,以及3 ...

  4. 搜索 --- 数独求解 POJ 2676 Sudoku

    Sudoku Problem's Link:   http://poj.org/problem?id=2676 Mean: 略 analyse: 记录所有空位置,判断当前空位置是否可以填某个数,然后直 ...

  5. poj 2676 Sudoku ( dfs )

    dfs 用的还是不行啊,做题还是得看别人的博客!!! 题目:http://poj.org/problem?id=2676 题意:把一个9行9列的网格,再细分为9个3*3的子网格,要求每行.每列.每个子 ...

  6. POJ 2676 Sudoku (数独 DFS)

      Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 14368   Accepted: 7102   Special Judg ...

  7. POJ 2676 - Sudoku - [蓝桥杯 数独][DFS]

    题目链接:http://poj.org/problem?id=2676 Time Limit: 2000MS Memory Limit: 65536K Description Sudoku is a ...

  8. 【POJ 2676】 Sudoku

    [题目链接] http://poj.org/problem?id=2676 [算法] 深度优先搜索 [代码] #include <algorithm> #include <bitse ...

  9. POJ 2676/2918 数独(dfs)

    思路:记录每行每列每一个宫已经出现的数字就可以.数据比較弱 另外POJ 3074 3076 必须用剪枝策略.但实现较麻烦,还是以后学了DLX再来做吧 //Accepted 160K 0MS #incl ...

随机推荐

  1. Css常用收集

    /*-------------------------------------- 圆角*/ -webkit-border-radius: 4px;  -moz-border-radius: 4px; ...

  2. OC-弱语法

    [Person test] : unrecognized selector sent to instance 给Person对象发送了一个不能识别的消息 :test

  3. post、get的区别

    get的参数会显示在浏览器地址栏中,而 post的参数不会显示在浏览器地址栏中: 使用 post提交的页面在点击[刷新]按钮的时候浏览器一般会提示“是否重新提交”,而 get则不会: 用get的页面可 ...

  4. jquery 选择器 -高级使用 新的 心得

    jQuery的each函数: each函数等同于c语言中的for函数: 里面每次循环的 "context 上下文" == 当前的dom ,可以使用this, 也可以使用$(this ...

  5. 使用Minify来优化网站性能

    Minify 是用PHP5开发的应用,通过遵循一些Yahoo的优化规则来提高网站的性能.它会合并多个CSS或者JavaScript文件,移除一些不必要的空格和注释,进行gzip压缩,并且会设置浏览器的 ...

  6. Tomcat6.0 管理器配置

    最近忙着毕业答辩,填写材料,好多事情都给耽搁了!一个月都没有继续翻译tomcat,这回有点时间赶紧补上. 这部分,其实对开发者或者tomcat管理者来说,只要会登录页面管理器或者使用写简单的http就 ...

  7. WCF-复合类型使用;传输图片

    一:WCF服务端 IService1.cs中: public interface IService1 { [OperationContract] [WebInvoke(Method = "P ...

  8. vector族函数

     本文原创,转载请注明出处,本人Q1273314690 vector(mode = "logical", length = 0) as.vector(x, mode = " ...

  9. 安装cocoods

    http://www.tuicool.com/articles/7VvuAr3 http://blog.csdn.net/gf771115/article/details/50403253(详细,用终 ...

  10. 【定时任务|开机启动】Windows Server 2008/2012 计划任务配置(任务计划程序)每分钟执行BAT

    打开计划任务快捷方式(在 “管理工具”内): C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools\Tas ...