题目链接:hdu2780

#include<stdio.h>
#include<string.h>
#include<queue>
#include<math.h>
#include<algorithm>
#define N 15
using namespace std;
int map[N][N],v1[15],v2[15];
int flag,n,ok;
struct node
{
int x,y;
}s[6];
void judge1()//判断行和列
{
int i,j;
for(i = 0 ; i < 9 ; i ++)
{
memset(v1,0,sizeof(v1));
memset(v2,0,sizeof(v2));
for(j = 0 ; j < 9 ; j ++)
{
if(v1[map[i][j]])
{
ok = 0;
return;
}
else
v1[map[i][j]] = 1;
if(v2[map[j][i]])
{
ok = 0;
return;
}
else
v2[map[j][i]] = 1;
}
}
}
void judge2()//判断3*3矩形
{
int i,j,x,y;
for(i = 0 ; i <= 6 ; i += 3 )
{
for(j = 0 ; j <= 6 ; j += 3)
{
memset(v1,0,sizeof(v1));
for(x = 0 ; x < 3 ; x ++)
for(y = 0 ; y < 3 ; y ++)
{
if(v1[map[x + i][y + j]])
{
ok = 0;
return ;
}
else v1[map[x + i][y + j]] = 1;
}
}
}
}
void print()
{
ok = 1;
judge1();
if(!ok)
{
printf("Could not complete this grid.\n");
return ;
}
ok = 1;
judge2();
if(!ok)
printf("Could not complete this grid.\n");
else
{
for(int i = 0 ; i < 9 ; i ++)
{
for(int j = 0 ; j < 9 ; j ++)
printf("%d",map[i][j]);
printf("\n");
}
}
}
bool judge(int cur,int t)
{
int i,j;
for(i = 0 ; i < 9 ; i ++)
if(map[ s[cur].x ][i] == t || map[i][ s[cur].y ] == t)
return 0;
int x = s[cur].x/3 * 3;
int y = s[cur].y/3 * 3;
for(i = 0 ; i < 3 ; i ++)
for(j = 0 ; j < 3 ; j ++)
if(map[x + i][y + j] == t) return 0;
return 1;
}
void dfs(int cur)
{
if(cur == n)
{
flag = 1;
print();
return ;
}
if(flag) return ;
for(int i = 1 ; i <= 9 ; i ++)
if(judge(cur,i) && !flag)
{
map[s[cur].x][s[cur].y] = i;
dfs(cur + 1);
map[s[cur].x][s[cur].y] = 0;
}
}
int main()
{
int i,j,T;
char a[15];
scanf("%d",&T);
while(T--)
{
n = 0;
for(i = 0 ; i < 9 ; i ++)
{
scanf("%s",a);
for(j = 0 ; j < 9 ; j ++)
{
map[i][j] = a[j] - '0';
if(!map[i][j])
{
s[n].x = i;
s[n].y = j;
n ++;
}
}
}
flag = 0;
dfs(0);
if(!flag)
printf("Could not complete this grid.\n");
if(T) printf("\n");
}
return 0;
}

hdu 2780 Su-Su-Sudoku(DFS数独)的更多相关文章

  1. ACM : POJ 2676 SudoKu DFS - 数独

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

  2. ACM: ICPC/CCPC Sudoku DFS - 数独

    Sudoku Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/65535K (Java/Other) Total Submis ...

  3. 【POJ - 2676】Sudoku(数独 dfs+回溯)

    -->Sudoku 直接中文 Descriptions: Sudoku对数独非常感兴趣,今天他在书上看到了几道数独题: 给定一个由3*3的方块分割而成的9*9的表格(如图),其中一些表格填有1- ...

  4. HDU 1241 Oil Deposits --- 入门DFS

    HDU 1241 题目大意:给定一块油田,求其连通块的数目.上下左右斜对角相邻的@属于同一个连通块. 解题思路:对每一个@进行dfs遍历并标记访问状态,一次dfs可以访问一个连通块,最后统计数量. / ...

  5. hdu 1241 Oil Deposits(DFS求连通块)

    HDU 1241  Oil Deposits L -DFS Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & ...

  6. LeetCode:36. Valid Sudoku,数独是否有效

    LeetCode:36. Valid Sudoku,数独是否有效 : 题目: LeetCode:36. Valid Sudoku 描述: Determine if a Sudoku is valid, ...

  7. su;su -;sudo;sudo -i;sudo su;sudo su - 之间的区别

    今天我们来聊聊su;su -;sudo;sudo -i;sudo su;sudo su -他们之间的区别. su :su 在不加任何参数,默认为切换到root用户,但没有转到root用户家目录下,也就 ...

  8. HDOJ(HDU).1258 Sum It Up (DFS)

    HDOJ(HDU).1258 Sum It Up (DFS) [从零开始DFS(6)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双 ...

  9. HDOJ(HDU).1016 Prime Ring Problem (DFS)

    HDOJ(HDU).1016 Prime Ring Problem (DFS) [从零开始DFS(3)] 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架 ...

  10. HDU 1426 Sudoku Killer【DFS 数独】

    自从2006年3月10日至11日的首届数独世界锦标赛以后,数独这项游戏越来越受到人们的喜爱和重视. 据说,在2008北京奥运会上,会将数独列为一个单独的项目进行比赛,冠军将有可能获得的一份巨大的奖品— ...

随机推荐

  1. 2基本类型数组和枚举类型——重拾Java

    2.1 标识符和关键字 2.1.1标识符 标识符:用来标志类名.变量名.方法名.类型名.数组名.文件名的有效字符序列称为标识符.简单地说,标识符就是一个名字. Java关于标识符的语法规则 标识符由字 ...

  2. Spark数据类型SparseMatrix 解释

    http://blog.csdn.net/sinat_29508201/article/details/54089771 parseMatrix Spark的mllib包中提供了机器学习的两种基本数据 ...

  3. docker上传镜像

    已经存在镜像 docker tag conductor:ui docker.io/mhcvs2/mhc docker push docker.io/mhcvs2/mhc

  4. 使用UltraISO制作光盘镜像

    为什么使用光盘镜像文件: 1. 有些光盘中的内容必须在光盘运行环境中运行: 有些光盘的内容要在光盘运行的时候才能运行,即使你安装到电脑上都不行!例如某些游戏光盘等,这样就得每次使用时都要用光盘,对光驱 ...

  5. Appium原理初步--Android自动化测试学习历程

    章节:自动化基础篇——Appium原理初步(第七讲) 本期关键词: Appium.跨语言跨平台.Bootstrap 主要讲解内容及笔记: 一.what is appium 一种封装了uiautomat ...

  6. [leetcode]238. Product of Array Except Self除了自身以外的数组元素乘积

    Given an array nums of n integers where n > 1,  return an array output such that output[i] is equ ...

  7. [leetcode]250. Count Univalue Subtrees统计节点值相同的子树

    Given a binary tree, count the number of uni-value subtrees. A Uni-value subtree means all nodes of ...

  8. python while语句写法

    count=5 while count>0: print 'i love python' count=count-1 else: print 'over'

  9. 匹配数字、字母和?%&=-_这几个符号的正则表达式

    /^[\w\?%&=\-_]+$/ 说明:(1) \w 代表 0-9a-zA-Z 即数字.字母 (2) \?%&=\-_ 匹配?%&=-_,而正则中?代表0个或1个,因为是特殊 ...

  10. C语言程序,找出一个二维数组的鞍点。

    什么是鞍点????? 鞍点就是在一个二维数组中,某一个数在该行中最大,然而其在该列中又是最小的数,这样的数称为鞍点. 昨天突然在书上看到这样的一道题,就自己尝试着写了一个找出一个二维数组中的鞍点. 好 ...