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. 仿微信底部自定义菜单 移动web

    最近在做微信开发,要实现微信公众号改版—-改成微官网形式,即移动web页面中实现公众号的主页面,包括了公众号的菜单在底部显示 本文针对仿公众号底部菜单这个功能实现进行总结.实现采用html和css.J ...

  2. android-解决EditText的inputType为Password时, 字体不一致的问题

    今天做项目的时候,发现当edittext 的InputType为password时,它的字体和原来不一样: 网上找了一下,给出了解决办法: 第一: 去掉xml文件中的password配置,在代码中编写 ...

  3. c# 获取系统时间

    //获取日期+时间DateTime.Now.ToString();             // 2008-9-4 20:02:10DateTime.Now.ToLocalTime().ToStrin ...

  4. 【JavaScript】JS_Object跟Function的区别

    JS_Object和Function的区别 我们本次的解释,主要通过下图 粗看该图,估计你不一定能看明白.不过接下来让我逐行向你解释. 最左侧:意思是,有两个对象f1和f2,他们是通过new Foo( ...

  5. [设计模式] javascript 之 责任链模式

    责任链模式:定义 责任链接模式又称职责链模式,是一种对象的行为模式:它是一种链式结构,每个节点都有可能两种操作,要么处理该请求停止该请求操作,要么把请求转发到下一个节点,让下一个节点来处理请求:该模式 ...

  6. iOS: Crash文件解析(一)

    iOS Crash文件的解析(一) 开发程序的过程中不管我们已经如何小心,总是会在不经意间遇到程序闪退.脑补一下当你在一群人面前自信的拿着你的App做功能预演的时候,流畅的操作被无情地Crash打断. ...

  7. GCD与NSOperationQueue

    1> GCD是纯C语言的API,NSOperationQueue是基于GCD的OC版本封装 2> GCD只支持FIFO(先入先出)的队列,NSOperationQueue可以很方便地调整执 ...

  8. jquery datagrid加载后仅选定第一行

    function onLoadSuccess(data) { var rows = $("#DataGrid").datagrid("getRows"); if ...

  9. windows下PHP+Mysql+Apache环境搭建

    Apache版本:httpd-2.2.22-win32-x86-openssl-                   下载地址:http://pan.baidu.com/s/1sjuL4RV PHP版 ...

  10. mysql数据库性能调优总结积累

    mysql数据库的调优大概可以分为四大块 0 架构调优 ---根据业务 读写分库分表   ---主从 读写分离 1 配置的调优 ---开启缓存查询  设置缓存大小 ---最大连接数设置 ---数据库引 ...